现在很难解释。假设我有一个带有参数x的函数create,它接受一个字符串。是否可以赋予create函数创建由?:
定义的新对象的能力public void create(String x) {
this.stuff = new x();
}
答案 0 :(得分:1)
如果您只传入了4个不同的Strings
,那么与使用反射进行黑客攻击相比,它更容易进行切换。另一个特别是具有4个以上不同值的选项是创建Map<String, YourInterface>
,以便您可以使用this.stuff = map.get(x);
获取对象。这要求您的对象是无状态的。
switch(x) {
case "Foo":
this.stuff = new Foo();
break;
case "Bar":
this.stuff = new Bar();
break;
// etc.
}
如果您可以使用相同的参考,或者以更优雅的方式:
Map<String, IAttack> attackMap = new HashMap<>(); // Assuming IAttack is an interface implemented by your classes
public MyClass() {
attackMap.put("Foo", new Foo());
attackMap.put("Bar", new Bar());
}
public void create(String x) {
this.stuff = attackMap.get(x);
}