Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 展平列表-转换类型不匹配_Java_List_Type Conversion - Fatal编程技术网

Java 展平列表-转换类型不匹配

Java 展平列表-转换类型不匹配,java,list,type-conversion,Java,List,Type Conversion,我正在实现一个迭代器来展平列表列表,但它给了我一个错误,我无法理解为什么会发生这种情况: 错误是: 类型不匹配:无法从java.util.Iterator转换为java.util.Iterator 我很困惑,为什么它要尝试将一个类型转换为它自己?为什么它没有成功?是因为它在内部类中使用吗 public class FlattenList<T> implements Iterable<T>{ private List<List<T>> lis

我正在实现一个迭代器来展平列表列表,但它给了我一个错误,我无法理解为什么会发生这种情况:

错误是: 类型不匹配:无法从
java.util.Iterator
转换为
java.util.Iterator

我很困惑,为什么它要尝试将一个类型转换为它自己?为什么它没有成功?是因为它在内部类中使用吗

public class FlattenList<T> implements Iterable<T>{
    private List<List<T>> lists;
    public FlattenList(List<List<T>> list){
        this.lists = list;
    }
    public Iterator<T> iterator(){
        return new ListIterator();
    }
    class ListIterator<T> implements Iterator<T>{
        private Iterator<List<T>> listsiterator;
        private Iterator<T> listiterator;
        public ListIterator(){
            if (lists != null)
                listsiterator = lists.iterator(); // The conversion mismatch here
            }
        }
            //..
    }
}
公共类列表实现Iterable{
私人名单;
公共列表(列表){
this.lists=列表;
}
公共迭代器迭代器(){
返回新的ListIterator();
}
类ListIterator实现迭代器{
私有迭代器;
私有迭代器列表迭代器;
公共列表迭代器(){
如果(列表!=null)
listsiterator=lists.iterator();//此处的转换不匹配
}
}
//..
}
}

列表迭代器
类中删除类型参数
T
,可以解决您的问题。即:

class ListIterator implements Iterator<T> {

实际上,代码中有两个不同的类型参数。两者都被称为
T
,因此内部的阴影覆盖了外部。但它们肯定不一样。您的代码与此等效:

public class FlattenList<T> implements Iterable<T>{
    private List<List<T>> lists;
    public FlattenList(List<List<T>> list){
        this.lists = list;
    }
    public Iterator<T> iterator(){
        return new ListIterator();
    }
    class ListIterator<E> implements Iterator<E>{
        private Iterator<List<E>> listsiterator;
        private Iterator<E> listiterator;
        public ListIterator(){
            if (lists != null) {
                listsiterator = lists.iterator(); // The conversion mismatch here
            }
        }
        //..
    }
}
public class FlattenList<T> implements Iterable<T>{
    private List<List<T>> lists;
    public FlattenList(List<List<T>> list){
        this.lists = list;
    }
    public Iterator<T> iterator(){
        return new ListIterator();
    }
    class ListIterator<E> implements Iterator<E>{
        private Iterator<List<E>> listsiterator;
        private Iterator<E> listiterator;
        public ListIterator(){
            if (lists != null) {
                listsiterator = lists.iterator(); // The conversion mismatch here
            }
        }
        //..
    }
}
public class FlattenList<T> implements Iterable<T>{
    private List<List<T>> lists;
    public FlattenList(List<List<T>> list){
        this.lists = list;
    }
    public Iterator<T> iterator(){
        return new ListIterator();
    }
    class ListIterator implements Iterator<T>{
        private Iterator<List<T>> listsiterator;
        private Iterator<T> listiterator;
        public ListIterator(){
            if (lists != null) {
                listsiterator = lists.iterator(); // The conversion mismatch here
            }
        }
        //..
    }
}