【问题标题】:Inner interface in generates errors only when outer class is parameterized? Why?仅当外部类被参数化时,内部接口才会生成错误?为什么?
【发布时间】:2016-04-17 17:30:08
【问题描述】:

抽象方法 getNextNode 会生成错误,“无法对非静态类型 Node 进行静态引用”,但前提是 LinkedList 已参数化。如果我从 LinkedList 中删除泛型,错误就会消失。为什么?

public class LinkedList<T> {
    Node head;
    public LinkedList() {
        head = new Node();
    }
    private class Node {

    }

    interface stuff {
        public Node getNextNode();//ERROR Cannot make a static reference to the non-static type Node
    }
}

【问题讨论】:

标签: java class interface static parameterized


【解决方案1】:

正如错误试图告诉你的那样,你不能使用没有参数的泛型类型。

Node 实际上是LinkedList&lt;T&gt;.Node。由于您的接口不是通用接口(接口不从包含类继承类型参数),因此没有可以替代的T

您可以通过将Node 类设为static 来解决此问题,这样它就不会从其包含的类继承类型参数。
但是,您实际上并不想这样做,因为 Node 应该是通用的。

您实际上还需要使您的界面通用,以便它可以指定T

【讨论】:

    【解决方案2】:

    LinkedList&lt;T&gt;.Node 的缩写 Node 和您的 getNextNode() 不知道 T 是什么。

    【讨论】:

      【解决方案3】:
          interface can't be defined in an inner class
      
      
          http://www.xyzws.com/javafaq/why-an-interface-cant-be-defined-in-an-inner-class/56
      
      public class Test{
      interface stuff {
              public LinkedList.Node getNextNode();
          }
          public class LinkedList<T> {
              Node head;
      
              public LinkedList() {
                  head = new Node();
              }
              private class Node {
      
              }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-18
        • 1970-01-01
        • 2018-10-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-07
        • 1970-01-01
        相关资源
        最近更新 更多