Java泛型,无法从E转换为E

13 java generics

我的代码无法从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)

虽然一旦你意识到这个问题,请随意实施自己的解决方案;)
快乐的黑客攻击.


Jes*_*per 5

那是因为你已经为内部类赋予了MyIterator自己的类型参数E.请注意,这E是一个E与封闭类不同的类型参数(您已将它们命名为两者E,但它们是两个不同的类型参数).

只需省略内部类的类型参数:

private class MyIterator implements Iterator<E> {
Run Code Online (Sandbox Code Playgroud)