gpt4 book ai didi

java - 使用 try/catch 访问而不是检查 null?

转载 作者:行者123 更新时间:2023-11-29 04:22:34 25 4
gpt4 key购买 nike

我一直在研究一个代码库,其中以下结构很常见:

String value = null;

try {
value = pojoClass.getValue().getANumberOfFunctions();
} catch (Exception e) {
//ignore
}

if (value != null) {
//stuff going on
}

只是指出:如果 pojo 或其任何嵌套对象为 null,则包围的代码只会抛出异常。内部没有数据库访问权限,也没有比“获取”函数链更复杂的任何其他内容。

据我所知,抛出异常在性能方面比进行多次空值检查更昂贵。如果为了简单起见有几个对象可能为空(尽管不是为了调试),我可以理解(在一定程度上)这样做,但通常我看到的代码包含几行初始化,try/catches可以很容易地进入一个简单的 if 语句(因为通常“else”意味着什么都不做)。

我是否遗漏了什么,这是“惰性编程”吗,这里发生了一些超出我理解的事情?

最佳答案

如果您使用的是 Java 8,我建议您使用 Optional类(class)。它允许您有条件地根据对象是否存在(非空)或不存在以单行方式执行某些操作。示例:

static class A {    
private B b;
public A(B b) {
this.b = b;
}
public B getB() {return b;}
}

static class B {
private String s;
public B(String s) {
this.s = s;
}
public String getS() {
return s;
}
}

public static void main(String[] args) {
A a1 = new A(new B("a1"));
A a2 = new A(null);

Optional.ofNullable(a1).map(A::getB).map(B::getS).ifPresent(s->{
System.out.println(s);
});

Optional.ofNullable(a2).map(A::getB).map(B::getS).ifPresent(s->{
//this won't be executed
System.out.println(s);
});
}

关于java - 使用 try/catch 访问而不是检查 null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48185693/

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