你也可以试试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