我有一个接口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语句链(或开关)的情况下执行此操作?

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

最佳答案

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

如果您想拥有比实例化更复杂的逻辑,则可能需要instanceof方法,或者更好-使每个RBTree子类都有一个执行该逻辑的方法(并使该方法在RBTree中抽象化)

07-26 01:11