我的代码无法从 E 转换为 E。我可以强制转换为类型 E,但在这个阶段它似乎是多余的。我的阵列已声明为 E 型。
import java.util.Iterator;
public class DataTypeDemo<E>
{
private E[] data = (E[]) new Object [10];
public MyIterator newIterator()
{
return new MyIterator();
}
private class MyIterator<E> implements Iterator<E>
{
private int location;
public boolean hasNext()
{
return location < data.length;
}
public E next()
{
return (data[location++]); // error here
}
public void remove()
{
throw new UnsupportedOperationException();
}
}
}
编译器,抛出这个错误:
DataTypeDemo.java:23: 不兼容的类型 发现:E 必填:E
最佳答案
你的内部类型引入了它自己的类型变量:
private class MyIterator<E /* this is the problem*/> implements Iterator<E>
从而覆盖外部类类型变量
将您的类型声明更改为:
private class MyIterator implements Iterator<E>
引用:
- Generics FAQ (虽然这个问题没有从字面上提到,但这个 FAQ 条目暗示了它)
关于Java 泛型,无法从 E 转换为 E,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4916248/