[英]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
的代碼中,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;
}
}
我認為 java 不允許具有相同參數(數據類型)的多個構造函數。
如果您需要靈活地創建對象,請查看Builder
模式。 但是,在您的情況下,我不明白為什么只擁有一個帶有所有參數的構造函數就行不通。 只需從 resultSet 中獲取所有屬性,如果它們為 null,則不會設置它們。
如果您有兩個相同的構造函數,參數含義相同但效果不同,您可以嘗試將它們合二為一:
public Name(Type parameter, boolean type) {
if(type) {
}else {
}
}
如果您有 2 個以上相同的構造函數,則使用int type
和switch
。 只是建議。
編輯:這種情況下的types
應該由enum
定義,以便於代碼掌握。
如果為構造函數使用一組不同的參數會改變它的行為方式,我建議擴展或使用組合來創建一個具有新參數集的新類。
這也將遵守 OPEN/CLOSE 主要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.