java - 静态/非静态内部类 : The type parameter T is hiding the type T

标签 java generics inner-classes

当我使用 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/

相关文章:

java - 获取NoSuchBeanDefinitionException : No qualifying bean of type ServerRequest in Spring WebFlux

java - 如何在西类牙语中使用斯坦福 NLP 词性标记?

java - 在 OOP 中为类编写复制方法

java - 为什么泛型父类(super class)型的 Java 类型推断会在这里中断?

java - 如何为内部类创建多个实例

java - 有什么方法可以在不安装sl4a的情况下在android develop中调用python代码吗?

c# - 获取泛型参数的类型

c# - 通用约束忽略协方差

android - BroadcastReceiver 作为内部类

android - 服务中的 IntentService