赋予函数创建String参数定义的新对象的能力

时间:2016-05-12 12:57:33

标签: java

现在很难解释。假设我有一个带有参数x的函数create,它接受一个字符串。是否可以赋予create函数创建由?:

定义的新对象的能力
public void create(String x) {
  this.stuff = new x(); 
}

1 个答案:

答案 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);
}