public class Deque<Item> implements Iterable<Item> {
private int N; // size of the list
private Node first;
private Node last;
public Deque() {
private class Node {
private Item item;
private Node next;
private Node prev;
}
}
}
我一直收到错误,我的私有类Node有一个非法的修饰符,只允许final或abstract。但Node类不能独立,所以我不认为需要静态。如何在私有类中声明项目和节点有什么问题吗?如何解决此错误?
答案 0 :(得分:4)
你的逻辑基本上是健全的。主要的缺陷是你试图在构造函数中定义类,而你应该直接在Dequeue
内定义它:
public class Deque<Item> implements Iterable<Item> {
private class Node {
private Item item;
private Node next;
private Node prev;
}
...
}
允许在方法内定义一个类,但这不是你需要的。有关背景信息,请参阅Use of class definitions inside a method in Java
答案 1 :(得分:1)
您可以在块中定义类(如方法和构造函数),它们被称为Local classes。
但是,就像您无法将本地变量声明为private
,protected
或public
一样,您也无法声明本地类使用访问修饰符 - 因为它没有意义。本地类只在定义方法中可见。
如果确实打算声明本地类,请删除访问修饰符。但是,由于您在类型Node
的顶级类中声明字段,因此无法将其声明为本地类:只需将其移出构造函数。
只需了解关于“我不认为需要静态”的评论:我认为static
不需要。将static
添加到嵌套类应该是您的默认操作,除非您确实需要从Deque
实例引用包含Node
实例。
问题是每个Node
类都会有Deque
的隐藏引用,以便您可以通过Deque
访问Deque.this
实例。如果您不需要此引用,则可以通过创建嵌套类static
来减少不使用它所使用的内存。