猿问

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

涉及到对象操作object.xxxx(),如果对象为null则会抛异常,如果每次都if(o!=null)代码很丑陋一种做法是创建对象或者方法返回对象时都new一个对象而不是返回null
不过这样有时也不太好,比如结果为空的时候返回null更合理一点有更好的建议么?
拉风的咖菲猫
浏览 425回答 2
2回答

白板的微信

有一种模式叫NullObject,意思就是建立一个专用的空对象,以此来代表结果为空。比如这样:publicinterfaceMyObj{publicStringsomeOp();}publicclassNullObjimplementsMyObj{publicStringsomeOp(){return"It'sacontentofNullObj";//或者抛出一个特定异常,又或者打印出一条警告信息}}publicclassNormalObjimplementsMyObj{publicStringsomeOp(){Stringresult=null;//执行一些正常的代码returnresult;}}用法:1、建立全局常量:publicenumConstants{//这种写单例的方式在《EffectiveJava》中被推荐过,非常好的实现方式。ONE;publicfinalMyObjNULL_OBJ=newNullObj();//如果用enum写单例的话这里就不用static修饰符了。}2、被调用的代码在条件符合的时候返回NullObj:publicclassServer{...publicMyObjreceive(Stringparam){if(param==null){System.out.println("...");//记录一些logreturnConstants.ONE.NULL_OBJ;}MyObjresult=null;...returnresult;}...}3、在调用方:publicclassClient{publicresultsend(Stringcontent){Serverserver=null;Stringresult=null;try{...//初始化serverMyObjmyObj=server.receive(content);result=myObj.someOp();//如果你前面选择的是抛出特定异常,则这行代码就必须放在try-catch语句块中了//后续的操作就非常灵活了,或比对结果字符串或catch特定异常,取决于你的NullObj是怎么实现的...}catch(Exceptione){...}}}当然,通过捕获异常来进行流程控制的方式是不被推荐的。NullObject很灵活,可以做出很多扩展性很强的实现方案。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答