簡體   English   中英

Java - 具有相同參數的多個構造函數

[英]Java - Multiple constructors with same 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 類引用時,如何引用這些構造函數?

例如

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

你不能。 此外,這些函數不是構造函數。 你想如何決定調用哪個“構造函數”???

您可以合並這兩個功能:

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作為不需要的參數。

您不能創建多個具有相同名稱和相同參數的構造函數/方法

你可以做的是改變你的實現,而那些不是構造函數。

你可以按照 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 ;
}

如果你必須有多個構造函數,你可以像這樣添加一個虛擬參數。

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

這樣做時,性能下降(非常非常小),但如果代碼更具可讀性,那就值得了:)

文章

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

我認為 java 不允許具有相同參數(數據類型)的多個構造函數。

如果您需要靈活地創建對象,請查看Builder模式。 但是,在您的情況下,我不明白為什么只擁有一個帶有所有參數的構造函數就行不通。 只需從 resultSet 中獲取所有屬性,如果它們為 null,則不會設置它們。

如果您有兩個相同的構造函數,參數含義相同但效果不同,您可以嘗試將它們合二為一:

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

    }else {

    }
}

如果您有 2 個以上相同的構造函數,則使用int typeswitch 只是建議。

編輯:這種情況下的types應該由enum定義,以便於代碼掌握。

如果為構造函數使用一組不同的參數會改變它的行為方式,我建議擴展或使用組合來創建一個具有新參數集的新類。

這也將遵守 OPEN/CLOSE 主要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM