我想问一下是否有更优雅的方式来编写以下代码:
public class MTree {
class MTreeObject {
double[] vector;
}
class RoutingObject extends MTreeObject {
double radius;
}
class LeafObject extends MTreeObject {
int id;
}
class Node {
LinkedList<MTreeObject> list;
}
class InnerNode extends Node {
LinkedList<RoutingObject> list;
}
class LeafNode extends Node {
LinkedList<LeafObject> list;
}
public static void main(String[] argv) {
MTreeObject object = new RoutingObject();
Node node = new InnerNode();
((InnerNode)node).list.add((RoutingObject)object);
}
}
问题是如果我有例如:
class Result {
Node node;
}
然后在主
中调用public static void main(String[] argv) {
Result result = new Result();
MTreeObject object = new RoutingObject();
result.node = new InnerNode();
result.((InnerNode)node).list.add((RoutingObject)object);
}
它不按我想要的方式工作。我也可以这样做:
newnode = result.node
((InnerNode)newnode).list.add((RoutingObject)object);
但是在我更复杂的代码中我会有太多的变量...
答案 0 :(得分:2)
问题是您已将所有类声明为MTree的内部类。内部类的实例只能存在于外部类(MTree)的实例中。
尝试使您的类(RoutingObject,LeafObject等)成为独立的类而不是嵌套的类 要实例化内部类,必须首先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:
MTree mtree =新的MTree(); MTree.Node node = mtree.new Node();
请参阅:http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
从您的示例中不太确定您要完成的是什么,我猜最好的猜测是您应该不使用嵌套类。希望这会有所帮助。