第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

在重載方法中將 null 作為參數(shù)傳遞?

在重載方法中將 null 作為參數(shù)傳遞?

哆啦的時(shí)光機(jī) 2023-03-09 14:09:09
它在 Java 中針對(duì)以下類型的問題提供了一種解決方案:具有一個(gè)參數(shù)不同的重載方法。如果將不同的參數(shù)作為 null 傳入怎么辦?class PersonFactory {    public static Person create(String firstname, String lastname, String age) {          return create(firstname, lastname, Integer.valueOf(age));    }    public static Person create(String firstname, String lastname, Integer age) {           Person p = new Person();           p.setFirstname(firstname);           p.setLastname(lastname);           p.setAge(age);           return p;    }}PersonFactory.get("John", "Doe", null); //ambigous mapping我以為可以在這里傳遞一個(gè)Optional.empty(),但是沒有定義類型,因此不能用于選擇正確的方法...
查看完整描述

2 回答

?
ABOUTYOU

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


查看完整回答
反對(duì) 回復(fù) 2023-03-09
?
墨色風(fēng)雨

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 面更小。


查看完整回答
反對(duì) 回復(fù) 2023-03-09
  • 2 回答
  • 0 關(guān)注
  • 158 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)