Joh*_*mbo 3 java generics inner-classes
当我使用静态嵌套类时,我没有收到警告The type parameter T is hiding the type T
。但是,当我使用非静态嵌套类时,我收到警告。
public class CustomStack<T> {
private class CustomNode<T>{
private T data;
private CustomNode<T> next;
public CustomNode(T data){
this.data = data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,为什么当我使用静态嵌套类时没有收到此警告?
内部类有对其包含类的引用。T
通过该引用,内部类可以使用外部类中定义的值。例如,这样编译:
public class CustomStack<T> {
private class CustomNode {
private T data;
private CustomNode next;
public CustomNode(T data) {
this.data = data;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果创建内部类static
,它就不能再使用T
外部类中定义的内容,它将无法编译。
在您发布的代码中,T
内部类的参数重新定义了T
外部类的参数。这很令人困惑,因为读者可能认为这T
在整个文件中意味着相同的事情,但事实并非如此。当在内部类中使用时,它会意味着其他的东西。
如果你想让内部类有自己的类型参数,那么你必须以不同的方式调用它,例如:
public class CustomStack<T> {
private class CustomNode<U> {
private U data;
private CustomNode<U> next;
public CustomNode(U data) {
this.data = data;
}
}
}
Run Code Online (Sandbox Code Playgroud)