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