为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

有一种模式叫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("...");//记录一些log
returnConstants.ONE.NULL_OBJ;
}
MyObjresult=null;
...
returnresult;
}
...
}3、在调用方:publicclassClient{
publicresultsend(Stringcontent){
Serverserver=null;
Stringresult=null;
try{
...//初始化server
MyObjmyObj=server.receive(content);
result=myObj.someOp();//如果你前面选择的是抛出特定异常,则这行代码就必须放在try-catch语句块中了
//后续的操作就非常灵活了,或比对结果字符串或catch特定异常,取决于你的NullObj是怎么实现的
...
}catch(Exceptione){
...
}
}
}当然,通过捕获异常来进行流程控制的方式是不被推荐的。NullObject很灵活,可以做出很多扩展性很强的实现方案。
                            
查看完整回答
反对 回复 2019-04-23
  • 2 回答
  • 0 关注
  • 424 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信