当我使用 static 嵌套类时,我没有收到警告 The type parameter T is hiding the type T
。但是,当我使用 non-static 嵌套类时,我收到了警告。
public class CustomStack<T> {
private class CustomNode<T>{
private T data;
private CustomNode<T> next;
public CustomNode(T data){
this.data = data;
}
}
}
我想知道,为什么我在使用static 嵌套类时没有得到这个警告?
最佳答案
内部类有一个对其包含类的引用。
通过该引用,内部类可以使用外部类中定义的值 T
。
例如,这个编译:
public class CustomStack<T> {
private class CustomNode {
private T data;
private CustomNode next;
public CustomNode(T data) {
this.data = data;
}
}
}
如果你让内部类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;
}
}
}
关于java - 静态/非静态内部类 : The type parameter T is hiding the type T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45243846/