您可以創建一個工廠,爲給定輸入返回正確的運算符。
public class OperatorFactory {
private static final Map<String, Operator<?>> OPERATORS = new HashMap<String, Operator<?>>();
static {
OPERATORS.put("<Number", new LessThanNumOperator());
OPERATORS.put("==Number", new EqualToNumOperator());
OPERATORS.put("<String", new LessThanStringOperator());
...
}
public static Operator<?> getOperator(String someUserSpecifiedOp, Class<?> paramType) {
String key = someUserSpecifiedOp;
if (Number.class.isAssignableFrom(paramType)) {
key += "Number";
} else if (String.class.isAssignableFrom(paramType)) {
key += "String";
}
return OPERATORS.get(key);
}
}
public interface Operator<T> {
public boolean execute(T lhs, T rhs);
}
public class LessThanNumOperator implements Operator<Number> {
public boolean execute(Number lhs, Number rhs) {
return lhs.doubleValue() < rhs.doubleValue();
}
}
,然後使用它:
OperatorFactory.getOperator(userDesignatedOperation, lhs.getClass()).execute(lhs, rhs);
你爲什麼要這麼做?爲什麼不使用策略設計模式? – Raedwald
無論你在做什麼,動態創建IF都不是這種方式 – Steve
我從字面上通過自定義腳本語言閱讀條件。它們的形式如下:functionA operator functionB。運營商現在有限,但可能增長。我希望能夠閱讀字符串,並以某種方式評估表達式。 – rciafardone