现在很难解释。假设我有一个带有参数x的函数create,它接受一个字符串。对象所定义的新对象的能力是否可以赋予create函数:
public void create(String x) {
this.stuff = new x();
}发布于 2016-05-12 13:08:01
如果只有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);
}https://stackoverflow.com/questions/37187631
复制相似问题