我的代码无法从E转换为E.我可以对E进行转换,但在此阶段似乎是多余的.我的数组已经声明为E-type.
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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编译器,抛出此错误:
DataTypeDemo.java:23:找到不兼容的类型:E required:E
Sea*_*oyd 20
你的内部类型引入了它自己的类型变量:
private class MyIterator<E /* this is the problem*/> implements Iterator<E>
Run Code Online (Sandbox Code Playgroud)
从而覆盖外类类型变量
将您的类型声明更改为:
private class MyIterator implements Iterator<E>
Run Code Online (Sandbox Code Playgroud)
参考:
小智 5
问题的根源在于你的内在阶级.对于编译器,不能保证两个E的类型相同.
import java.util.Iterator;
import java.util.ArrayList;
public class DataTypeDemo<E>
{
private ArrayList<E> data = new ArrayList<E>(10);
private class MyIterator implements Iterator<E>
{
private int location;
public boolean hasNext()
{
return location < data.size();
}
public E next()
{
return data.get(location++);
}
public void remove()
{
throw new UnsupportedOperationException();
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然一旦你意识到这个问题,请随意实施自己的解决方案;)
快乐的黑客攻击.
那是因为你已经为内部类赋予了MyIterator自己的类型参数E.请注意,这E是一个E与封闭类不同的类型参数(您已将它们命名为两者E,但它们是两个不同的类型参数).
只需省略内部类的类型参数:
private class MyIterator implements Iterator<E> {
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4572 次 |
| 最近记录: |