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

标签 java generics

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

相关文章:

java - 带有 Chrome 驱动程序的 Selenium 网格(WebDriverException : The path to the driver executable must be set by the webdriver. chrome.driver 系统属性)

java - android:处理程序根本不工作

java - 使用 FactoryBean 创建泛型实例时,Spring 自动接线无法泛型

vb.net - VB中的 "Of Date"是什么?

c# - 我可以避免或优化这种动态调用吗?

java - 防止手机静音

java - 访问派生类对象的字段,C++ vs Java

java - hibernate 查询中的 clazz_ 属性

C# 泛型集合

c# - C# 中的泛型和继承