創建函數數組,
public class FunctionTypes {
public void func() {}
}
.....
FunctionTypes[] functions = new FunctionTypes[] {
new FunctionTypes() {
public void func() { f1(); }
public void f1() {
// handle case #1
}
},
new FunctionTypes() {
public void func() { f2(); }
public void f2() {
// handle case #2
}
},
new FunctionTypes() {
public void func() { f3(); }
public void f3() {
// handle case #3
}
},
new FunctionTypes() {
public void func() { f4(); }
public void f4() {
// handle case #4
}
},
....
};
// invoke case #0
functions[0].func();
// invoke case #1
functions[1].func();
選擇索引,從A,B,C使用的比特,d
index = 0;
index |= a;
index |= b << 1;
index |= c << 2;
index |= d << 3;
好像是它們計數所有16個病例。或者,您可以從主類繼承16個不同的子類,並覆蓋每個不同子類中的方法,並使用頂級類數組選擇這些類的實例。也許實現一個接口可能會更好。
我不知道java的map是否有訪問時間O(n * logn),但是數組訪問是O(1)。
這很奇怪*反正*,但除了'a','b','c'和'd'之外的一些更實際的代碼將會朝着理想的解決方案邁出更長的一步。你也想告訴我們你有可能的組合和行動鏈。這可能會很長,但如果您正在尋找一個可靠的解決方案,我們的回答者必須對您的問題有一個深入的瞭解。 – Makoto
如果沒有副作用,可以使用位掩碼。 – Andrey
謝謝@Makoto,但組合如我所說:所有16種方式來組合4位。 0000,0001,0010,0011,0100,0101等,直到1111.沒有理由輸入全部內容。與每個組合相關的特定方法調用中會發生什麼情況,如果這就是您的「操作鏈」所代表的含義,則與問題無關。 – KevinRethwisch