我有一个如下界面:
public interface Condition extends OtherConditionInterface {}
实现它的多个子类:
- 可以在构造函数中使用多个子条件
public class SubCondition1 implements Condition {
private final List<Condition> conditions;
public Subcondition1(final Condition... condition) {
this.conditions = Arrays.asList(condition);
}
}
- 只有一些字符串:
public class SubCondition2 implements Condition {
private String cond;
public Subcondition2(final String cond) {
this.cond = cond;
}
}
现在,我有另一个类,其构造函数看起来像这样:
public class Bar {
private final String name;
private final Condition condition;
public Bar(String name, Condition condition) {
this.name = name;
this.condition = condition;
}
}
据推测,当我想创建一个新的Bar对象时,我会这样:
new Bar("sampleTitle", new Subcondition1(new Subcondition2("done"), new Subcondition1(new Subcondition2("foo"), new Subcondition2("bar")));
但我遇到的问题是我有第二个参数需要传递给Bar(条件)存储为String,如下所示:
String str = "new Subcondition1(new Subcondition2("done"), new Subcondition1(new Subcondition2("foo"), new Subcondition2("bar"))";
我的问题是,在尝试创建新的Bar时,如果有任何方法可以将字符串作为第二个参数传递,请考虑它是否要求条件。
我知道这远非理想。甚至不是常识,但数据存储在String中的事实现在无法改变。
编辑:使用ScriptEngine将String解析为Object,然后将其转换为(Condition)是不可行的。原因是脚本的执行总是会抛出以下形式的错误:“Condition”未定义,因为它们不是JavaScript的一部分。此外,无法导入新库。因为我不允许这样做。