我一直在研究一个代码库,其中以下结构很常见:
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/