2 回答

TA貢獻1812條經驗 獲得超5個贊
您需要轉換null
為您想要的類型,以便編譯器可以解決歧義。
例如:
PersonFactory.get("John", "Doe", (String) null);
或者
PersonFactory.get("John", "Doe", (Integer) null);

TA貢獻1853條經驗 獲得超6個贊
如果您傳遞 literal ,這只是一個問題null。
考慮添加另一個僅包含 2 個參數的重載,以避免出現 a) 的調用站點問題null;b) marstran建議的消除歧義的空投:
public static Person create(String firstname, String lastname) {
return create(firstname, lastname, (Integer) null);
// Or (String), if that's the one you want to invoke.
}
null本身(或強制轉換)對代碼的讀者來說意義不大。
現有重載的另一種方法是定義一個常量:
public static final Integer MISSING_AGE = null;
// ...
Person.create(firstname, lastname, MISSING_AGE)
您可以為此常量選擇一個名稱,它可以準確傳達空參數值的語義:
隱瞞年齡
未知年齡
零年齡
默認年齡
現在創建沒有年齡,但稍后會提供
...
(類似地,應該命名上面建議的 2-argcreate
方法以傳達不提供年齡的含義)。
盡管如此,如果沒有 String 重載,就不會出現此問題。為方便起見,我假設您有 String 重載:您不需要對 API 的調用者如此“友善”。
就目前而言,不清楚您會接受什么 String 值:您接受空格嗎?千位逗號分隔?十六進制?ETC。
讓調用者處理這些問題:如果您只接受一個Integer
,那么他們就是必須弄清楚如何構造它的人。
這對他們來說可能更容易,因為他們比你更了解他們的數據,而且他們發現你的 API 更容易理解。這對您來說更容易,因為您需要維護的 API 面更小。
添加回答
舉報