【问题标题】: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<T>.Node。由于您的接口不是通用接口(接口不从包含类继承类型参数),因此没有可以替代的T。
您可以通过将Node 类设为static 来解决此问题,这样它就不会从其包含的类继承类型参数。
但是,您实际上并不想这样做,因为 Node 应该是通用的。
您实际上还需要使您的界面通用,以便它可以指定T。
【解决方案2】:
LinkedList<T>.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 {
}
}