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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java如不想么每次都判空 if(o !=null) 怎么做?

java如不想么每次都判空 if(o !=null) 怎么做?

回首憶惘然 2019-04-06 08:31:35
涉及到對象操作object.xxxx(),如果對象為null則會拋異常,如果每次都if(o!=null)代碼很丑陋一種做法是創(chuàng)建對象或者方法返回對象時都new一個對象而不是返回null不過這樣有時也不太好,比如結(jié)果為空的時候返回null更合理一點有更好的建議么?
查看完整描述

2 回答

?
PIPIONE

TA貢獻1829條經(jīng)驗 獲得超9個贊

有一種模式叫NullObject,意思就是建立一個專用的空對象,以此來代表結(jié)果為空。比如這樣:publicinterfaceMyObj{
publicStringsomeOp();
}
publicclassNullObjimplementsMyObj{
publicStringsomeOp(){
return"It'sacontentofNullObj";//或者拋出一個特定異常,又或者打印出一條警告信息
}
}
publicclassNormalObjimplementsMyObj{
publicStringsomeOp(){
Stringresult=null;
//執(zhí)行一些正常的代碼
returnresult;
}
}用法:1、建立全局常量:publicenumConstants{//這種寫單例的方式在《EffectiveJava》中被推薦過,非常好的實現(xiàn)方式。
ONE;
publicfinalMyObjNULL_OBJ=newNullObj();//如果用enum寫單例的話這里就不用static修飾符了。
}2、被調(diào)用的代碼在條件符合的時候返回NullObj:publicclassServer{
...
publicMyObjreceive(Stringparam){
if(param==null){
System.out.println("...");//記錄一些log
returnConstants.ONE.NULL_OBJ;
}
MyObjresult=null;
...
returnresult;
}
...
}3、在調(diào)用方:publicclassClient{
publicresultsend(Stringcontent){
Serverserver=null;
Stringresult=null;
try{
...//初始化server
MyObjmyObj=server.receive(content);
result=myObj.someOp();//如果你前面選擇的是拋出特定異常,則這行代碼就必須放在try-catch語句塊中了
//后續(xù)的操作就非常靈活了,或比對結(jié)果字符串或catch特定異常,取決于你的NullObj是怎么實現(xiàn)的
...
}catch(Exceptione){
...
}
}
}當然,通過捕獲異常來進行流程控制的方式是不被推薦的。NullObject很靈活,可以做出很多擴展性很強的實現(xiàn)方案。
                            
查看完整回答
反對 回復(fù) 2019-04-06
  • 2 回答
  • 0 關(guān)注
  • 384 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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