我有一个Java私有方法,我试图找到在该方法内创建对象的最佳方法。以下是我正在尝试的两种不同方法:
方法A:
private void createObject() {
Object A;
if (conditionA) {
A = new Object();
//do some Action X with object A
} else {
//Do something without object A
if (conditionB) {
return;
}
A = new Object();
//do some Action Y with object A
}
return;
}
方法B:
private void createObject() {
Object A = new Object()
if (conditionA) {
//do some action X with Object A
} else {
//Do something without Object A
if (conditionB) {
return;
}
//do some action Y with Object A
}
return;
}
很明显,两个代码段均正常运行,没有任何问题。我只是想找出更好的编码风格和标准。
答案 0 :(得分:1)
让我们写真相表
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
}
优良作法是尽可能减少变量的范围。而且,如果实例化非常昂贵,您还希望减少实例化的时间。
这里,对象a
仅在必要时初始化,并且其范围应尽可能小(只有一个 if 块)
答案 1 :(得分:0)
我相信,如果要使用 default 值初始化对象,则应在声明的位置进行
Object A = new Object();
if (conditionA) {
...
}
答案 2 :(得分:0)
方法A更好。
在这种情况下,请考虑不满足“ if”条件,并且条件变为“ else”。
如果条件B满足,它将返回,因此不会将内存分配给A。
在方法B中,不必要地进行了内存分配,在上述情况下这没有用。
答案 3 :(得分:0)
我将采用方法A,因为仅在需要时才需要初始化对象。
如果该对象的初始化非常复杂,为了避免重复自己,您可以定义一个static
辅助方法来初始化该对象,或者通过Supplier<>
进行操作:>
Supplier<Type> objSupplier = () -> new Type(a, b, c, d, whatever)
然后,在应该创建对象的两个地方,您要做
A = objSupplier.get();
(请注意,变量通常用小写/ camelCase编写)。