猿问

按需创建 Java 对象

我有一个 java 私有方法,我正在尝试找到在该方法中创建对象的最佳方法。以下是我正在尝试的两种不同方法:


方法一:


 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;

 }

显然,两个代码片段都可以正常工作并且没有任何问题。我只是想找出更好的编码风格和标准。


弑天下
浏览 126回答 3
3回答

跃然一笑

让我们写真值表  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块)

红颜莎娜

方法 A 更好。在那,考虑“如果”条件不满足,它进入“其他”。如果满足条件B,那么它将返回。所以内存没有分配给A。在方法 B 中,进行了不必要的内存分配,这在上述情况下没有用。

繁华开满天机

我会采用方法 A,因为只需要在需要时初始化对象。如果该对象的初始化相当复杂,为了避免重复自己,您可以定义一个static辅助方法来初始化该对象,或者您通过以下方式进行Supplier<>:Supplier<Type>&nbsp;objSupplier&nbsp;=&nbsp;()&nbsp;->&nbsp;new&nbsp;Type(a,&nbsp;b,&nbsp;c,&nbsp;d,&nbsp;whatever)然后,在应该创建对象的两个地方,你做A&nbsp;=&nbsp;objSupplier.get();(请注意,变量通常以小写/驼峰形式编写)。
随时随地看视频慕课网APP

相关分类

Java
我要回答