0

我想问一下是否有更优雅的方式来编写以下代码:

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;
}

然后调用 main

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); 

但是在我更复杂的代码中我会有太多的变量......

4

1 回答 1

2

问题是您已将所有类声明为 MTree 的内部类。内部类的实例只能存在于外部类(MTree)的实例中。

尝试使您的类(RoutingObject、LeafObject 等)成为独立类而不是嵌套类或实例化内部类,您必须先实例化外部类。然后,使用以下语法在外部对象中创建内部对象:

MTree mtree = new MTree(); MTree.Node 节点 = mtree.new Node();

请参阅: http ://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

从您的示例中不太确定您要完成什么,我猜最好的猜测是您不应该使用嵌套类。希望这可以帮助。

于 2012-04-07T00:35:59.203 回答