うーん、完全に素朴な試み:
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個のソース「行」を取得するには、これらのソリューションのいずれかに別の配列を追加する必要があります