空指针 java调用_java-变量引用与重复性get调用以避免空指针

我的代码中有一种情况,我大约进行了5次链接的get调用,而这些get调用中的任何一个都可能返回空值.我希望不必一定那样,但这就是我使用的服务返回我请求的对象的方式,因此我必须处理它.

最初,我的代码如下所示:

String firstDomain = book.getBookImages().getDomains().getDefaults().getDomain().get(0);

不幸的是,该行容易出现空指针和arraylist超出范围的异常.我知道我将不得不检查空指针,但是我试图决定

A.最有效的代码

B.最好看的代码

一种选择是分配大量引用,然后检查是否为空.像这样:

BookImages bImages = book.getBookImages();

Domains domains = null;

Defaults defaults = null;

List domain = null;

String firstDomain = null;

if (bImages != null) {

domains = bImages.getDomains();

if (domains != null) {

defaults = domains.getDefaults();

if (defaults != null) {

domain = defaults.getDomain();

if (domain != null && domain.size() > 0) {

firstDomain = domain.get(0);

}

}

}

}

if (firstDomain == null) {

throw new IncompleteBookException("The book was incompletely attributed.");

}

我认为这非常有效,但令我烦恼的是多少行.它是该方法一部分的长度的两倍以上.

这是我能想到的另一种选择:

if (book.getBookImages() == null || book.getBookImages().getDomains() == null || book.getBookImages().getDomains().getDefaults() == null || book.getBookImages().getDomains().getDefaults().getDomain() == null || book.getBookImages().getDomains().getDefaults().getDomain().size() < 1 || book.getBookImages().getDomains().getDefaults().getDomain().get(0) == null) {

throw new IncompleteBookException("The book was incompletely attributed.");

}

我喜欢这样的事实,即使只有三行,这简直太荒谬了,但是我不确定Java的运行时或编译器是否会优化那些重复的方法调用.

我也欢迎其他更好的解决方案.有谁知道这些选项中的一个或另一个是否会比另一个更好,或者这种微优化是否愚蠢,甚至不考虑它,我应该使用对我来说更好的那个?对于不同的事情,我可能不得不做多次.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值