首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中创建对象时重载构造函数与传递null

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

Stack Overflow用户
提问于 2012-05-16 14:58:19
回答 5查看 4.2K关注 0票数 5

如果一个类在对象创建过程中需要多个字段信息,并且它允许的information.Than更少,我们有两个选择

  1. 提供多个构造函数,或者
  2. 允许客户端在创建对象时传递空参数。

其中,这是最佳实践。例如:

案例1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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方法。请在其他类中考虑这些主要方法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-16 15:13:44

使用多个构造函数是最好的。许多标准API库也实现了它。此外,它使代码松散耦合,通过传递显式的“null”值来创建对象不是一种好的做法。

情况2增加了高耦合的机会。

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

编辑:

更好的做法是使用命名工厂方法来构造对象,因为它们比拥有多个构造函数更具自我文档化。Joshua Bloch的Effective

票数 9
EN

Stack Overflow用户

发布于 2012-05-16 15:01:20

第一种情况是更喜欢。这是在具有此选项的API中的大多数类中完成的。这也意味着您可以更改第二个/第三个/...如果需要,可以在将来的版本中引入参数,而不必升级对构造函数的调用。

票数 1
EN

Stack Overflow用户

发布于 2012-05-16 15:08:58

情况3,提供将创建对象的方法。

代码语言:javascript
复制
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的情况就越少。提供这样的工厂方法将降低风险,并改善对对象的控制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10613479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档