Java - 具有相同参数的多个构造函数

时间:2013-04-18 06:50:38

标签: java constructor arguments

我需要创建多个具有相同参数的构造函数,以便我可以从我的DAO类中调用这些构造函数来填充不同的下拉值

public static Employee empType(String empCode, String empType) {

    Employee emp = new Employee();
    emp .empCode= empCode;
    emp .empType= empType;
    return emp ;
}

 public static Employee empDept(String deptCode, String deptName) {

    Employee emp = new Employee();
    emp .deptCode= deptCode;
    emp .deptName= deptName;
    return emp ;
}

当我从DAO类引用时,我该如何引用这些构造函数?

E.g。

private static Employee myList(ResultSet resultSet) throws SQLException {
    return new <what should be here>((resultSet.getString("DB_NAME1")), 
                      (resultSet.getString("DB_NAME2")));
}

8 个答案:

答案 0 :(得分:8)

你不能。 而且,这些函数不是构造函数。你想如何决定调用哪个“构造函数”???

您可以合并两个功能:

public static Employee createEmp(String empCode, String empType, String deptName) {
    Employee emp = new Employee();
    emp .empCode= empCode;
    emp .empType= empType;
    emp .deptName= deptName;
    return emp ;
}

并使用null作为不需要的参数。

答案 1 :(得分:6)

您不能创建具有相同名称和相同参数的多个构造函数/方法

您可以做的是更改您的实施,而这些不是结构。

你可以按照Baraky的说法,你也可以使用它(创建一个布尔标志或一个int值标志)

public Employee empType(String val1, String val2, int type) {

     Employee emp = new Employee();

    if(type == 1){
          emp .empCode= val1;
          emp .empType= val2;
    }else if(type ==2){
          emp.deptCode= val1;
          emp .deptName= val2;
     }
    return emp ;
}

答案 2 :(得分:1)

如果你必须有多个构造函数,你可以像这样添加一个虚拟参数。

public static Employee empType(String empCode, String empType) {

    Employee emp = new Employee();
    emp .empCode= empCode;
    emp .empType= empType;
    return emp ;
}

 public static Employee empDept(String deptCode, String deptName, bool dummy) {

    Employee emp = new Employee();
    emp .deptCode= deptCode;
    emp .deptName= deptName;
    return emp ;
}

执行此操作时,它是最小的性能(非常非常小),但如果代码更具可读性,则值得:)

答案 3 :(得分:1)

我不认为java允许多个具有相同参数(数据类型)的构造函数。

答案 4 :(得分:1)

如果您需要灵活创建对象,请查看Builder模式。但是,在你的情况下,我不明白为什么它只是让一个构造函数包含所有参数。只需从resultSet中获取所有属性,如果它们为null,则它们就不会被设置。

答案 5 :(得分:1)

如果你有两个具有相同参数含义但效果不同的构造函数,你可以尝试将它们合二为一:

public Name(Type parameter, boolean type) {
    if(type) {

    }else {

    }
}

如果您有2个以上相同的构造函数,请使用int typeswitch。只是建议。

编辑:types在这种情况下应由enum定义,以便更轻松地掌握代码。

答案 6 :(得分:1)

如果构造函数使用一组不同的参数来改变它的行为方式,我建议扩展或使用composition来创建一个带有新参数集的新类。

那也将坚持OPEN / CLOSE主席。

答案 7 :(得分:0)

article

在Java中,不能有多个方法(包括构造函数)与 相同的论点。要解决此限制,您需要使用 具有不同名称的静态方法,将客户端代码用作 构造函数。在静态方法ctorApple之后的代码中, ctorBananactorCarrot内部调用私有构造函数 Foo()并以相同的身份充当多个构造函数的角色 论点。前缀ctor旨在提醒客户这些 方法充当构造函数的角色。

class Foo
{
   private Foo()
   {
     // ...
   }
   public static Foo ctorApple(/* parameters */)
   {
       Foo f = new Foo();
       // set properties here using parameters
       return f;
   }
   public static Foo ctorBanana(/* parameters */)
   {
       Foo f = new Foo();
       // set properties here using parameters
       return f;
   }
   public static Foo ctorCarrot(/* parameters */)
   {
       Foo f = new Foo();
       // set properties here using parameters
       return f;
   }
}