java - 为什么内部类提示泛型?

标签 java generics

我有一个实现 Iterable 的类,以便用户可以使用迭代器。我正在使用泛型来允许用户使用任何类型并使用该类。

这是下面没有警告的工作代码-

public class CustomStackUsingArray<Type> implements CustomList<Type>, Iterable<Type> {

    Type []arr;

    public Iterator<Type> iterator() {
        return (new ListIterator());
    }

    private class ListIterator implements Iterator<Type>{
        //Implement Iterator here
    }

    //Implement other methods here
}

但是,如果我有这样定义的 ListIterator-

private class ListIterator<Type> implements Iterator<Type>

我在 Eclipse 中收到警告,参数 Type 隐藏了类型 Type

为什么当我在课后指定泛型类型时它会报错?为了能够在我的类里面使用 Type,我不应该这样做吗?我在定义 CustomStackUsingArray 时添加了 Type 并且效果很好。

最佳答案

当你说 class Something<T> (可能有多个类型参数),您是在告诉编译器您正在定义一个 泛型类,带有 T作为它的参数。你可以说 private class ListIterator<Type2> implements Iterator<Type2> ;那本来是合法的,但不是您想要的。它会创建一个新的通用类,其中 Type2指的是新类型参数的名称。当你说 private class ListIterator<Type> implements Iterator<Type> ,您实际上在做完全相同的事情,但使用名为 Type 的类型参数而不是 Type2 .这TypeType 无关外部类。此外,在这个新类(class)中,每当你说 Type ,您指的是 类型参数,这意味着您不能再引用外部类型参数——它是隐藏的,这就是 Eclipse 告诉您的内容。

这一切的发生是因为您告诉编译器您想要创建一个新的泛型类。但你真的不知道。您只需要一个内部类,它是您正在定义的外部泛型类的一部分(我认为)。因此,您需要省略第一个 <Type> .它应该按照您想要的方式工作。

关于java - 为什么内部类提示泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45271993/

相关文章:

java - 扩展一个类,其中父类的参数扩展了一个类

java - 鼠标在网格内移动

java - 套接字如何既连接又关闭?

Java 泛型编译器错误 : incompatible types

Java:如何从泛型类型获取类文字?

java - 合并排序中的通用数组初始化

java - Eclipse Workspace JRE 不匹配任何配置设置?

Java - 模数函数在处理大量数据时失败

java - 导入 com.amazonaws.services.dynamodbv2.document.DynamoDB;无法解析导入的文档部分

scala - 为什么像 "cons[B >: A](v: B)"这样定义的方法接受不是 A 父类(super class)型的类型参数?