3 回答
TA贡献1826条经验 获得超6个赞
让我们写真值表
A | B | Expected Outcome
-----+-------+-------------------------------
True | True | do X with object A
True | False | do X with object A
False| False | do Y with object A
False| True | do something without object A
-----+-------+-------------------------------
我认为这可以转化为:
boolean doXWithA = conditionA;
boolean doYWithA = !conditionA && !conditionB;
boolean doSomethingWithA = doXWithA || doYWithA;
if(doSomethingWithA)
Object a = new Object();
if (doXWithA) {
// do X with object A
} else if (doXWithB) {
// do X with object B
}
} else {
// do something without object A
}
好的做法是尽可能减少变量的范围。如果实例化很昂贵,您还希望减少实例化它的次数。这里 Objecta只在必要时才初始化,并且它的范围尽可能小(只有一个if块)
TA贡献1842条经验 获得超12个赞
方法 A 更好。
在那,考虑“如果”条件不满足,它进入“其他”。
如果满足条件B,那么它将返回。所以内存没有分配给A。
在方法 B 中,进行了不必要的内存分配,这在上述情况下没有用。
TA贡献1816条经验 获得超4个赞
我会采用方法 A,因为只需要在需要时初始化对象。
如果该对象的初始化相当复杂,为了避免重复自己,您可以定义一个static
辅助方法来初始化该对象,或者您通过以下方式进行Supplier<>
:
Supplier<Type> objSupplier = () -> new Type(a, b, c, d, whatever)
然后,在应该创建对象的两个地方,你做
A = objSupplier.get();
(请注意,变量通常以小写/驼峰形式编写)。
添加回答
举报