5

我需要创建多个具有相同参数的构造函数,以便我可以从我的 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 类中引用时,如何引用这些构造函数?

例如

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

8 回答 8

9

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

您可以合并这两个功能:

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用作不需要的参数。

于 2013-04-18T06:56:05.217 回答
7

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

你可以做的是改变你的实现,而那些不是构造函数。

您可以遵循 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 ;
}
于 2013-04-18T07:00:15.187 回答
4

文章

在 Java 中,您不能有多个具有相同参数的方法(包括构造函数)。要解决此限制,您需要使用具有不同名称的静态方法,将客户端代码用作构造函数。在静态方法ctorApple之后 的代码中ctorBanana,在ctorCarrot内部调用私有构造函数 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;
   }
}

于 2020-03-11T09:50:01.803 回答
2

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

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 ;
}

这样做时,性能下降很小(非常非常小),但如果代码更具可读性,那是值得的 :)

于 2013-04-18T06:56:23.570 回答
1

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

于 2013-04-18T06:56:31.180 回答
1

如果您需要灵活地创建对象,请查看该Builder模式。但是,在您的情况下,我不明白为什么仅拥有一个带有所有参数的构造函数就不起作用。只需从结果集中获取所有属性,如果它们为空,则不会设置它们。

于 2013-04-18T06:58:27.390 回答
1

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

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

    }else {

    }
}

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

编辑:types在这种情况下,应该定义enum为更容易掌握代码。

于 2016-05-14T12:59:50.143 回答
1

如果对构造函数使用不同的参数集会改变其行为方式,我建议扩展或使用组合来创建具有新参数集的新类。

这也将遵守 OPEN/CLOSE 原则。

于 2017-06-27T17:52:53.520 回答