我有一个接口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
中抽象化)