gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:53:21 25 4
gpt4 key购买 nike

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

错误是:
类型不匹配:无法从 java.util.Iterator<java.util.List<T>> 转换至 java.util.Iterator<java.util.List<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<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
}
}
//..
}
}

最佳答案

您的代码中实际上有两个不同的类型参数。两者都被称为 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
}
}
//..
}
}

这会产生一个稍微有用的错误消息:

Type mismatch: cannot convert from java.util.Iterator<java.util.List<T>> to java.util.Iterator<java.util.List<E>>



解决方案不是重新声明类型变量。自 ListIterator是一个内部类,它可以访问包含实例的 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 implements Iterator<T>{
private Iterator<List<T>> listsiterator;
private Iterator<T> listiterator;
public ListIterator(){
if (lists != null) {
listsiterator = lists.iterator(); // The conversion mismatch here
}
}
//..
}
}

关于java - 展平列表列表 - 转换类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17099920/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com