Java 为什么内部类抱怨泛型类型?

Java 为什么内部类抱怨泛型类型?,java,generics,Java,Generics,我有一个实现Iterable的类,以便用户可以使用迭代器。我使用泛型来允许用户使用任何类型并使用该类 这是下面的工作代码,没有警告- public class CustomStackUsingArray<Type> implements CustomList<Type>, Iterable<Type> { Type []arr; public Iterator<Type> iterator() { return

我有一个实现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
}
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
才能在内部类中使用
类型
,则不需要。