Java三元对象数组创建 - 样式

时间:2016-12-14 06:51:48

标签: java

哪个更好?

    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 该问题询问如何基于布尔值的评估创建两个完全不同的数组。我的问题是如何(或是否)清楚地表明正在创建的一个数组是另一个数组的子集。

1 个答案:

答案 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对象。