编程最佳实践:初始化或不初始化

时间:2014-09-26 20:38:36

标签: java initialization

哪个更好?

案例1:

set = new set<>();

if(flagEnabled) {
  set = generateSet();
}

update(set);

案例2:

set; // no initialization

if(flagEnabled) {
  set = generateSet();
} else {
  set = new set();
}

update(set);

哪一个是可取的?

6 个答案:

答案 0 :(得分:5)

选择第二种情况:在您的代码中有一条路径,其中创建的对象只是被丢弃并被另一个替换。

最好无条件地初始化您的对象:您可以通过使用三元运算符选择适当的选项来完成此操作,如下所示:

set s = flagEnabled ? generateSet() : new set();

条件逻辑仍然存在,但现在它与初始化相结合,使您的意图更容易看到。

答案 1 :(得分:3)

两个代码示例之间没有逻辑差异,但第一个示例可能涉及创建丢弃的新对象。要创建不必要的对象,您可以使用第二个示例,if / else

答案 2 :(得分:2)

第二部分在技术上会更好,因为它可以节省一些可能不必要的对象创建,从而有助于垃圾收集器。这与所谓的 Lazy Instantiation 有关,这意味着只有在需要时才会在内存中实例化对象。

但从逻辑上讲,这两者都是相同的。

以下是关于Lazy Instantiation

的详细介绍

答案 3 :(得分:0)

您正在将变量初始化为Object,在执行if-else语句后会立即将其丢弃。最佳做法是将其初始化为null,尽管不是必需但是分配从未使用的对象是堆内存的纯粹浪费

答案 4 :(得分:0)

如果有人要使用此代码,或者如果您要在很长一段时间内维护此代码,最好保持简单并在将其创建为某个默认值时进行设置。

答案 5 :(得分:0)

我会考虑在generateSet()方法中移动条件:

Set<T> generateSet() {
    Set<T> theSet = new Set<>();

    if(flagEnabled) {
        // do stuff
    }

    return theSet;
}

然后你可以简单地做

mySet = generateSet();