重载构造函数VS在Java中创建对象时传递null

时间:2012-05-16 06:58:19

标签: java constructor

如果一个类在创建对象时需要多个字段信息,并且它允许更少的信息。我们有两个选项
1.提供多个构造函数,或者 2.允许客户端在创建对象时传递null参数。

其中最佳做法是这些。 例如:
情况下-1:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    Test(A ob1,B ob2){
            this(ob1, ob2, null);    
    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B());
    }
}

案例-2:

public class Test {
    Test(A ob1,B ob2, C ob3){

    }
    public static void main(String args[]){
        Test ob = new Test(new A(),new B(), null);
    }
}

我在同一个类中使用了main方法。请在其他课程中考虑这些主要方法。

谢谢,
山塔努

5 个答案:

答案 0 :(得分:8)

使用多个构造函数是最好的。许多标准API库也实现了它。 它还使代码松散耦合。

案例2增加了高耦合的可能性。

除主要问题外: 阅读更多:Best way to handle multiple constructors in Java

答案 1 :(得分:1)

案例一是喜欢的。这在具有此选项的API中的大多数类中完成。它还意味着您可以根据需要在将来的版本中更改第二个/第三个/ ...参数,而无需升级对构造函数的调用。

答案 2 :(得分:1)

案例3,提供了一个创建对象的方法。

public class A {

  public static A create(B b) {
     A a = new A();
       a.setB(b);
  }

  public static A create(B b, C c) {
     A a = create(b);
       a.setC(c);

   return a;
  }

  private A() {} 

  public void setB(B);
  public void setC(C);

} 

构造函数应该能够创建对象以防止内存泄漏。其中较少的参数可以最大限度地减少发生NullPointerException时的情况。提供像所呈现的工厂方法将降低风险并改善对对象的控制。

答案 3 :(得分:0)

第一个案例是最好的案例。为什么要避免使用多个构造函数?除非你不是他们,否则他们不会打扰你。使用不同的构造函数也会增加代码的可读性,因为很明显需要什么参数来实例化对象,与null-case相比,你总是需要查看不需要的参数。

答案 4 :(得分:0)

未输入空值,因此您可能会产生未来错误和疑问

 new Thing( myA, null, null)

这里不清楚意图是传递空B和空C,

 new Thing (myA)

是明确的