您好,匿名用户
随意问技术百科期待您的加入

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

0 投票

涉及到对象操作 object.xxxx(),如果对象为null则会抛异常,如果每次都if(o !=null) 代码很丑陋

一种做法是创建对象或者方法返回对象时都new一个对象而不是返回null
不过这样有时也不太好,比如结果为空的时候返回null更合理一点

有更好的建议么 ?

用户头像 提问 2012年 12月1日 @ Malphite 上等兵 (306 威望)
分享到:

1个回答

0 投票
 
最佳答案

这是是工程设计上常见的问题,一般的解决方案就是 @特价萝卜 所说的NullObject模式。本来想投 @特价萝卜 的答案赞成票,但纠结良久还是觉得说得有些复杂了。

简单来说就是有一个NullObject与原有业务对象实现相同的接口(或继承同一个父类),让客户端调用时可以无感知(也不必判定null)

有一个很好的例子就是著名JSON解析框架Jackson。以下代码是Jackson从一段JSON中获取其一级子节点lv1下的二级子节点lv2的内容:

JsonNode root = ...;
JsonNode child = root.get("lv1").get("lv2");

以上代码很可能遇到lv1不存在的情况,因此第一个get()就会返回null,那么第二个get()执行时自然就抛出NullPointerException了。为了解决这个问题,作者提供了path方法来替代get方法:

JsonNode root = ...;
JsonNode child = root.path("lv1").path("lv2");

当lv1不存在时,path()返回一个JsonNode的子类叫做MissingNode(但客户端暂时无需知道),MissingNode的path方法则继续返回MissingNode,这样无论这个链式调用写多长都不会抛出任何异常。

直到最后客户端调用完成后检查返回结果是否为MissingNode:

if (child.isMissingNode()) { ... }
用户头像 回复 2012年 12月1日 @ Draven 上等兵 (325 威望)
选中 2012年 12月1日 @Malphite
提一个问题:

相关问题

0 投票
1 回复 37 阅读
0 投票
1 回复 39 阅读
0 投票
1 回复 30 阅读
0 投票
1 回复 42 阅读
用户头像 提问 2012年 12月1日 @ Hera 上等兵 (249 威望)
0 投票
1 回复 51 阅读
用户头像 提问 2012年 12月1日 @ Amumu 上等兵 (340 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...