嗯,一个完全天真的尝试:
public interface Condition<Type T> {
public boolean process(T object);
}
ArrayList row = new ArrayList<Condition>(10);
row.add( new Condition<YourObject>() {
public boolean process(YourObject obj) {
if ( obj.property > 0 ) return true;
else return false;
});
row.add( new Condition<YourObject>() {
public boolean process(YourObject obj) {
if ( obj.property2 == 100 ) return true;
else return false;
});
然后你会迭代:
for ( Condition<YourObject> cond : row ) {
if ( ! cond.process(yourobj) ) break;
}
一个稍微复杂的示例,您可以更简洁地用 javascript 编写决策表,并且可能使用 Beanshell 来执行逻辑。在我给你举个例子之前,我必须先敲一下这个壳。
或者,如果您发布了一个示例,有人可能会想出一些简单的 Scala 例程来做您想做的事情。
编辑:
所以我做了一些研究和思考,对于 Beanshell,你可以使用这样的东西:
import bsh.Interpreter;
Interpreter i = new Interpreter(); // Construct an interpreter
YourObject yourObject = new YourObject();
i.set("myObject", yourObject );
// Source an external script file
i.source("somefile.bsh");
somefile.bsh 可能看起来像这样:
var rules = new Array();
rules.push( function(var) {
if ( var.getProperty() == 0 ) return true;
else return false;
});
rules.push( function(var) {
if ( var.getProperty() < 1000 ) return true;
else return false;
});
... more rules ...
for ( var func in rules ) {
if ( !func( myObject ) ) break;
}
与重新编译 Java 源代码相比,这将使您更灵活地更改规则。
您必须向这些解决方案中的任何一个添加另一个数组才能获得 100 个源“行”