2 回答

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

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果您傳遞 literal ,這只是一個(gè)問題null。
考慮添加另一個(gè)僅包含 2 個(gè)參數(shù)的重載,以避免出現(xiàn) a) 的調(diào)用站點(diǎn)問題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本身(或強(qiáng)制轉(zhuǎn)換)對(duì)代碼的讀者來說意義不大。
現(xiàn)有重載的另一種方法是定義一個(gè)常量:
public static final Integer MISSING_AGE = null;
// ...
Person.create(firstname, lastname, MISSING_AGE)
您可以為此常量選擇一個(gè)名稱,它可以準(zhǔn)確傳達(dá)空參數(shù)值的語義:
隱瞞年齡
未知年齡
零年齡
默認(rèn)年齡
現(xiàn)在創(chuàng)建沒有年齡,但稍后會(huì)提供
...
(類似地,應(yīng)該命名上面建議的 2-argcreate
方法以傳達(dá)不提供年齡的含義)。
盡管如此,如果沒有 String 重載,就不會(huì)出現(xiàn)此問題。為方便起見,我假設(shè)您有 String 重載:您不需要對(duì) API 的調(diào)用者如此“友善”。
就目前而言,不清楚您會(huì)接受什么 String 值:您接受空格嗎?千位逗號(hào)分隔?十六進(jìn)制?ETC。
讓調(diào)用者處理這些問題:如果您只接受一個(gè)Integer
,那么他們就是必須弄清楚如何構(gòu)造它的人。
這對(duì)他們來說可能更容易,因?yàn)樗麄儽饶愀私馑麄兊臄?shù)據(jù),而且他們發(fā)現(xiàn)你的 API 更容易理解。這對(duì)您來說更容易,因?yàn)槟枰S護(hù)的 API 面更小。
添加回答
舉報(bào)