我的情况是我的代码结构看起来像。
class BaseClass ..
class DerivedClass1 extends BaseClass ...
class DerivedClass2 extends BaseClass ...
class DerivedClass3 extends BaseClass ...
现在在运行时我想使用基于整数classId
的任何一个派生类。
类似的东西,
BaseClass myObj = new ((classId == 1) ? DerivedClass1 : (classId == 2) ? DerivedClass2 : DerivedClass3
我想要某种随机行为。例如,有一次我的应用程序可能会绘制一条线,而在其他时候它可能会画一个圆圈 如何在Java中编写上述功能?
答案 0 :(得分:2)
只需使用多态和任何你想要的样式(switch / if-else)。例如:
BaseClass myObj;
switch(classId): {
case 1:
myObj = new DerivedClass1();
break;
case 2:
myObj = new DerivedClass2();
break;
case 3:
myObj = new DerivedClass3();
break
default:
throw RuntimeException ("Id not recognized);
}
Do something with object;
答案 1 :(得分:2)
这是一个非常反模式,因为它类似于标记类,根据Effective Java建议不要使用。
通常,在java中执行此类操作的方法是让工厂实例化BaseClass
子类型的对象。这可能对您的情况有帮助,也可能没有帮助,因为您可能需要根据上下文动态生成不同的实例。
我不建议一般使用整数ID,因为事实证明它不是非常健壮(如果整数没有映射到某个类型怎么办?)。您可以使用Class<? extends BaseClass>
对象,并通过反射或嵌套if语句实例化。
您的具体用例是什么?更多信息可能有助于我们提出更清晰,更强大的解决方案。