2015-10-15 30 views
4

它是一種標準的代碼或其他替代方法嗎?我想了一下我寫的代碼。最後放棄了,並認爲與你們檢查。是否使用javaargs而不是在Java中重載的標準方式?

這是我的場景。

private String functionNameXYZ(String a,String b) { 
    //Logic goes here 
} 
private String functionNameXYZ(String a,String b,String c) { 
    //Same logic goes here , Nothing much difference because of String c 
} 

所以我壽 ught跳過了同樣的目的兩種功能,我創建瞭如下一個單一的功能。

private String functionNameXYZ(String a, String b,String... c){ 
    return performlogic(a,b,(c.lenght!=0)? c[0]:null); 
} 
private String performlogic(String a,String b, String c) { 
    //logic , return "string" 
} 

哪一種是標準的編碼方式?是不是將邏輯分解爲新方法而不是重複[第二種情況]還是其他方式?請建議您是否找到更好的方法?

+0

如果您期待任意數量的參數(如'String.format'),則使用可變參數,但如果期望參數的常量和特定順序,則使用重載。 Plus:甚至可以使用重載指定不同的類型;這是不容易的,可變參數。 – GiantTree

+0

最重要的事情就是超負荷。儘管如此,過載意味着不同的處理或邏輯。這纔是重點。 –

回答

6

如果你只有兩個有效的選項是兩個String參數和三個String參數,使用可變參數是一點點矯枉過正,更糟的是 - 這是令人困惑,因爲這意味着,你也可以通過五年,十年或一個極大爭論。相反,你可以做一些簡單得多:

private String functionNameXYZ(String a, String b) { 
    functionNameXYZ(a, b, null); 
} 

private String functionNameXYZ(String a, String b, String c) { 
    // One place for the logic 
} 
+0

感謝您的意見,請按照此方式:) – scarysnow

1

你的第一個場景是好的,除非你想也許採取任何大批量的函數通用的代碼,並把它放在一個單獨的函數(或更容易,有用更少的參數調用函數更多)。

重載是好的,但重寫相同的代碼都是不好的做法。

而且,由於Java沒有默認參數,我不是具有爲可空一個公共方法的說法過於激烈,即使在JavaDoc中註明。超載是要走的路。

1

我認爲你需要問自己一個問題:什麼樣的輸入是合法的?

如果你的程序應該處理2 ... n個參數,那麼絕對使用可變參數。但是,如果合法輸入你的函數或者是正好2個或3個參數,那麼你應該使用模式:

private String functionNameXYZ(String a, String b) { 
    // logic of function 
} 

private String functionNameXYZ(String a, String b, String c) { 
    // place the logic for handling 'c' input then call 
    functionNameXYZ(a, b); 
} 

此外,作爲上述其他海報:

private String functionNameXYZ(String a, String b) { 
    functionNameXYZ(a, b, null); 
} 

private String functionNameXYZ(String a, String b, String c) { 
    // One place for the logic 
} 

就個人而言,我更喜歡第一種方法,因爲它清楚地分離了處理'c'參數和其他參數的邏輯。這是常用的,當你可以分開的邏輯,例如在構造函數中。但是,當邏輯不容易解開時,請採用第二種方法。

相關問題