gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:14:10 26 4
gpt4 key购买 nike

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

最初,我的代码看起来像这样:

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

不幸的是,该行容易出现空指针和数组列表越界异常。我知道我将不得不检查空指针,但我正在努力决定

一个。这样做最有效的代码

B.这样做的最好看的代码

一个选项是分配大量引用,然后检查空值。像这样:

BookImages bImages = book.getBookImages();
Domains domains = null;
Defaults defaults = null;
List<String> 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 的运行时或编译器是否会优化掉那些重复的方法调用。

我也乐于接受其他更好的解决方案。有谁知道这些选项中的一个或另一个是否会比另一个更好,或者这是一个如此微观的优化,以至于连考虑它都是愚蠢的,我应该只使用对我来说更好的那个?对于不同的事情,我可能不得不多次执行此操作。

最佳答案

要遵循您的第二种方法,您可以应用此方法:

    if ((bImages=book.getBookImages()) == null
|| (domains=bImages.getDomains()) == null
|| (defaults=domains.getDefaults()) == null
|| (domain=defaults.getDomain()) == null
|| domain.size() < 1
|| (firstDomain=domain.get(0)) == null) {
throw new IncompleteBookException("The book was incompletely attributed.");
} else {
//here you can use the firstDomain variable, that is set with the correct value
}

这样更好,因为您避免了多次(无用的)相同的调用,并且您已经在变量 firstDomain 中设置了正确的值(当然,前提是没有任何 null 等等......)

关于java - 变量引用与重复 get 调用以避免空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23144596/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com