Java 为什么内部类抱怨泛型类型?
我有一个实现Iterable的类,以便用户可以使用迭代器。我使用泛型来允许用户使用任何类型并使用该类 这是下面的工作代码,没有警告-Java 为什么内部类抱怨泛型类型?,java,generics,Java,Generics,我有一个实现Iterable的类,以便用户可以使用迭代器。我使用泛型来允许用户使用任何类型并使用该类 这是下面的工作代码,没有警告- public class CustomStackUsingArray<Type> implements CustomList<Type>, Iterable<Type> { Type []arr; public Iterator<Type> iterator() { return
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
}
public类CustomStackUsingArray实现CustomList,Iterable{
[]型arr;
公共迭代器迭代器(){
返回(新的ListIterator());
}
私有类ListIterator实现了迭代器{
//在这里实现迭代器
}
//在这里实现其他方法
}
但是,如果我有这样定义的ListIterator-
private class ListIterator<Type> implements Iterator<Type>
私有类ListIterator实现迭代器
我在Eclipse中得到一个警告,参数类型正在隐藏类型类型
为什么在我的类之后指定泛型类型时它会抱怨?我不应该这样做,以便我能够在我的类中使用类型吗?我在定义
CustomStackUsingArray
时添加了Type
,效果很好。当你说class Something
(可能有多个类型参数)时,你告诉编译器你正在定义一个新的泛型类,参数是T
。您可以说,私有类ListIterator实现了迭代器
;那是合法的,但不是你想要的。它将创建一个新的泛型类,其中Type2
引用新类型参数的名称。当您说私有类ListIterator实现迭代器
时,实际上您在做完全相同的事情,但是使用名为type
的类型参数,而不是Type2
。此类型
与外部类的类型
没有连接。另外,在这个新类中,每当您说Type
,您都在引用新的Type参数,这意味着您不能再引用外部类型参数——它是隐藏的,这就是Eclipse告诉您的
这一切都是因为您告诉编译器您想创建一个新的泛型类。但你真的不知道。您只需要一个内部类,它是您正在定义的外部泛型类的一部分(我认为)。因此,您需要取消第一个
。它应该按照您想要的方式工作。这有一个重复的地方,但是当您重新声明它时,您对顶级泛型隐藏了
参数。如果您认为必须说类ListIterator
才能在内部类中使用类型
,则不需要。