你也可以試試Builder;對於這種用途,Java不如其他語言。但這裏是供參考:
第一槍
class RuleBuilder {
private Map<Double, Integer[][]> rules;
public RuleBuilder() {
rules = new HashMap<Double, Integer[][]>();
}
public RuleBuilder rule(double key, Integer[]... rows) {
rules.put(key, rows);
return this;
}
public Integer[] row(Integer... ints) {
return ints;
}
public Map<Double, Integer[][]> build() {
return rules;
}
}
示例用法:
private static final Map<Double, Integer[][]> rules =
new RuleBuilder() {{
rule(-0.6, row(1, 3));
rule(-0.3, row(2, 2));
rule(0.0, row(2, 4), row(3,3), row(4, 2));
rule(0.3, row(4, 4));
rule(0.6, row(5, 3));
}}.build();
第二杆
爲了elimate最後的 「建立()」 呼叫和double brace init你可以嘗試:
class RuleBuilder2 extends HashMap<Double, Integer[][]> {
public RuleBuilder2 rule(double key, Integer[]... rows) {
put(key, rows);
return this;
}
public Integer[] row(Integer... ints) {
return ints;
}
}
在這種情況下
的代碼是一個好一點:
private static final Map<Double, Integer[][]> rules2 =
new RuleBuilder2().
rule(-0.6, row(1, 3)).
rule(-0.3, row(2, 2)).
rule(0.0, row(2, 4), row(3,3), row(4, 2)).
rule(0.3, row(4, 4)).
rule(0.6, row(5, 3));
編輯
可能是我用不那麼有意義的名稱;盒裝/非盒裝轉換仍然是一個問題,但這是一個問題Java
什麼是代碼?這看起來像原始沉迷代碼的氣味。 – 2009-04-21 15:12:34
這是一套用於視覺引導機器人運動的模糊邏輯控制器的簡化規則。 – JRL 2009-04-21 15:45:57
是否有任何理由使用Integer [] []而不是int [] []? – 2009-04-21 21:07:30