从很多子类Java中确定子类

时间:2011-11-14 12:53:49

标签: java inheritance instanceof subclass

我有接口 Tree抽象类 RBTree,它实现了这个接口。我还有几个类Tree1 ... Tree9,它们扩展了这个抽象类。

我写了一个测试单元,我想做这样的事情:

public void testRandom(RBTree tree){
    for(int i = 0; i < 10; i++){
        rbTree = new Tree1(); //if the tree in the parameter was of instance Tree1
        rbTree = new Tree2(); //if the tree in the parameter was of instance Tree2
        //etc.

        /**
         * do something with rbTree
         */
    }
}

是否可以使用带有大量instanceof()的if语句链(或开关)

(注意:我无法改变设计的任何内容,我知道这不是最佳选择)

3 个答案:

答案 0 :(得分:3)

您可以使用tree.getClass().newInstance()

如果你想要比实例化更复杂的逻辑,你可能需要instanceof方法,或者更好 - 让每个RBTree子类都有一个执行该逻辑的方法(并在{ {1}})

答案 1 :(得分:2)

试试这个:

rbTree = tree.class.newInstance();

答案 2 :(得分:1)

使用反射,你可以:

string name = tree.getClass().getName()
Class.forName(name).newInstance();

问题是如果实际的实现有不同的方法等,你将无法访问它们。