从Java的许多子类中确定子类
我有一个接口从Java的许多子类中确定子类,java,inheritance,instanceof,subclass,Java,Inheritance,Instanceof,Subclass,我有一个接口树和一个实现这个接口的抽象类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 rbTr
树
和一个实现这个接口的抽象类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
*/
}
}
public void testRandom(RBTree树){
对于(int i=0;i<10;i++){
rbTree=new Tree1();//如果参数中的树是实例Tree1
rbTree=new Tree2();//如果参数中的树是实例Tree2
//等等。
/**
*用这棵树做点什么
*/
}
}
如果不使用一系列if语句(或开关)和大量的instanceof()
,是否可以做到这一点
(注意:我不能改变任何设计,我知道它不是真正的最优)您可以使用
tree.getClass().newInstance()
如果您想拥有比实例化更复杂的逻辑,您可能需要instanceof方法,或者更好-使每个
RBTree
子类都有一个执行该逻辑的方法(并使该方法在RBTree
中抽象)您可以使用tree.getClass().newInstance()
如果您想拥有比实例化更复杂的逻辑,您可能需要instanceof方法,或者更好-使每个RBTree
子类都有一个执行该逻辑的方法(并使该方法在RBTree
中抽象)尝试以下方法:
rbTree = tree.class.newInstance();
试试这个:
rbTree = tree.class.newInstance();
使用反射,您可以:
string name = tree.getClass().getName()
Class.forName(name).newInstance();
问题是,如果实际实现有不同的方法等,您将无法访问它们。使用反射,您可以:
string name = tree.getClass().getName()
Class.forName(name).newInstance();
问题是,如果实际的实现有不同的方法等,您将无法访问它们。为什么要添加额外的行和遍历字符串?在这种情况下,这并不是真正必要的,但它确实提供了一种替代其他答案的方法,这可能很方便。我不知道他的其他代码,也许他比现在更喜欢传递类名。这可能会引起哼哼的思考。仅此而已。除非通过外部系统,否则不应传递类名。JVM中的类由一个类objectwhy表示,为什么需要额外的行和遍历字符串?在本例中,这并不是必需的,但它确实提供了一个替代其他答案的方法,这可能很方便。我不知道他的其他代码,也许他比现在更喜欢传递类名。这可能会引起哼哼的思考。仅此而已。除非通过外部系统,否则不应传递类名。JVM中的类由类对象表示,非常简单。同样感谢您提及替代方法。非常简单。也感谢您提到替代方法。