我有一个实现 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
.这Type
与 Type
无关外部类。此外,在这个新类(class)中,每当你说 Type
,您指的是 新 类型参数,这意味着您不能再引用外部类型参数——它是隐藏的,这就是 Eclipse 告诉您的内容。
这一切的发生是因为您告诉编译器您想要创建一个新的泛型类。但你真的不知道。您只需要一个内部类,它是您正在定义的外部泛型类的一部分(我认为)。因此,您需要省略第一个 <Type>
.它应该按照您想要的方式工作。
关于java - 为什么内部类提示泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45271993/