代码之家  ›  专栏  ›  技术社区  ›  John Rambo

静态/非静态内部类:类型参数T隐藏类型T

  •  2
  • John Rambo  · 技术社区  · 7 年前

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

    我想知道,为什么我在使用 静止的

    2 回复  |  直到 7 年前
        1
  •  5
  •   janos slartidan    4 年前

    内部类具有对其包含类的引用。 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 在整个文件中表示相同的内容,但事实并非如此。 当在内部类中使用时,它将意味着其他内容。

    那么你必须用不同的方式来称呼它,例如:

    public class CustomStack<T> {
        private class CustomNode<U> {
            private U data;
            private CustomNode<U> next;
    
            public CustomNode(U data) {
                this.data = data;
            }   
        }
    }
    
        2
  •  0
  •   Jason Oviedo    7 年前