2013-02-18 91 views
-1

我正在处理双端队列的实现。我有一个Deque类,它有一个内部类节点来表示列表中的项目。我声明中的Deque(本身就是一个公共类)类是这样的:从单独的类访问内部类

public class Node(){ 
// 
} 

现在创建基本的对象创建语法新节点是deque的类本身很简单:

Node newNode = newNode(arg1); 

不过,我想能够从单独的类中声明新节点,这是一个提供单元测试的DequeTest类。当我尝试使用上面的语法创建一个新节点时,出现一个错误,指出Node类不可见。我正在开发一个预定义的API,所以我不能创建任何新的公共方法。返回新节点的私有createNode()方法是否最优?即使这似乎是行不通的,因为编译器甚至在使用Node关键字时会抛出错误。

+2

内部类不是静态的,所以你需要一个外部类的实例。你尝试过'新的Deque()。new Node();'? – toniedzwiedz 2013-02-18 00:18:53

+0

只需将内部类设为静态:http://stackoverflow.com/questions/1353309/java-static-vs-non-static-inner-class – 2013-02-18 00:21:01

+0

您是否尝试过http://docs.oracle.com/javase/tutorial /java/javaOO/nested.html? – djechlin 2013-02-18 00:36:23

回答

0

不可能。这是制作内部课程的重点:仅限于家长。你为什么想要?如果你在其他地方使用Node,首先它不应该是内部类,因为它不属于任何一个类。您可能会考虑制作一个公共的Node类,然后从Node中创建单独的内部类子类。
参见:here API文档。

+3

你读过你链接到的文章吗?只要它引用外部类的实例,就可以获得内部类的实例。换句话说,要创建一个内部类的实例,你需要一个外部类的实例。此外,术语* parent class *作为* superclass *的不同名称存在,它与外部类无关。 – toniedzwiedz 2013-02-18 00:32:09