【问题标题】:Multiple parameters in constructors构造函数中的多个参数
【发布时间】:2013-02-05 15:29:01
【问题描述】:

我把下面的构造函数放在一起。我有一个问题是:我如何使用相同的构造函数没有参数并且同时使用两个或三个?有不止一种方法可以做到这一点吗?谢谢

public class bankaccount {

  String firstnameString;
  String lastnameString;
  int accountnumber;
  double accountbalance;;

  public bankaccount(String firstname,String lastname){
    int accountnumber=999999;
    double accountbalance=0.0;
  }
}

【问题讨论】:

  • 只定义多个构造函数。
  • 您正在当前构造函数中声明局部变量,而您可能想要设置字段的值。你必须解决这个问题......
  • @jlordo 他也不使用firstnamelastname
  • @ColinD:是的,这也需要修复。

标签: java class-constructors


【解决方案1】:

您需要实现所有要使用的变体。然后您可以使用this() 在构造函数之间调用,以避免代码冗余:

public class BankAccount {

  public BankAccount(){
     this("", "");
     // or this(null, null);
  }

  public BankAccount(String firstname){
     this(firstname, "");
     // or this(firstname, null);
  }

  public BankAccount(String firstname, String lastname){
      // implement the actual code here
  }
}

顺便说一句,您应该检查一下Java Coding Conventions - class names(以及因此构造函数)在驼峰式的情况下。

【讨论】:

  • 风格点——我建议null 是一个更合适的默认值。但每个人都有自己的...
  • @DuncanJones 同意,我在打字时在这些替代方案之间疯狂地跳跃:) 最后,它基本上取决于“最终”构造函数的作用
【解决方案2】:

如果您没有实现任何构造函数,则会为您提供无参数构造函数。如果你想拥有多个构造函数,你自己实现所有的。

public class bankaccount {

  String firstnameString;
  String lastnameString;
  int accountnumber;
  double accountbalance;;

  public bankaccount(String firstname,String lastname){
    int accountnumber=999999;
    double accountbalance=0.0;
  }

  public bankaccount(){
    // put code here, or call this(null,null) / a different constructor
  }

}

【讨论】:

  • 两个构造函数效果一样。
【解决方案3】:

其他人建议您创建多个构造函数,这很好。但是,在某些情况下,您可能更喜欢只有零参数的构造函数并使用 getter 和 setter 来访问属性。

您的BankAccount 班级可能是其中一种情况。它看起来像一个数据对象,是通过使用一些 ORM(例如 Hibernate)持久化到 DBMS 中的对象之一。 Hibernate 不需要多参数构造函数,它会调用零参数构造函数并通过 getter 和 setter 访问属性。

这门课有什么用?它是映射到对象的数据库实体吗?你真的需要所有这些构造函数吗(这可能是浪费时间)?

从理论上讲,我的建议可以被认为是对 OO 设计的良好实践的反击,但实践与理论有些不同。如果您的类只携带一些数据并且您的构造函数不检查所提供参数的有效性,那么您可以只列出属性并使用 IDE 的工具来创建 getter 和 setter。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-04
    • 2016-08-01
    • 2017-04-04
    • 2021-05-25
    • 2020-02-13
    • 2015-11-19
    相关资源
    最近更新 更多