哪个更好?
public Foo[] createObjects(boolean displayAll) {
return displayAll ?
new Foo[] {new Foo (x, y, z), new Foo(z, y, x) } :
new Foo[] {new Foo (x, y, z)} ;
}
OR
public Foo[] createObjects(boolean displayAll) {
Foo foo = new Foo (x, y, z);
return displayAll ?
new Foo[] {foo, new Foo(z, y, x) } :
new Foo[] {foo} ;
}
为什么?
第二种方式对我来说更清晰,因为很明显无论displayAll是true还是false,第一个Foo都是创建的。
这个问题不是重复的: Initialize arrays using ternary operator 该问题询问如何基于布尔值的评估创建两个完全不同的数组。我的问题是如何(或是否)清楚地表明正在创建的一个数组是另一个数组的子集。
答案 0 :(得分:1)
我的问题是如何(或是否)清楚地表明正在创建的一个数组是另一个数组的一个子集。
如果您只是想这样做,我认为这两种方法都可以显示另一种方法的一部分。
但DRY原则规定“不要重复自己”#34;所以根据这个原则,第二种方法会更好。
不知道这只是我,我认为第二种方法可以通过这样做来改善:
public Foo[] createObjects(boolean displayAll) {
Foo foo = new Foo (x, y, z);
Foo otherFoo = new Foo(z, y, x);
return displayAll ?
new Foo[] {foo, otherFoo } :
new Foo[] {foo} ;
}
我只想保持每行的抽象级别相同。此外,这清楚地表明,如果displayAll
为真,则将返回其他Foo对象。