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
}
}
//..
}
}