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

标签 java exception null

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

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/

相关文章:

java - Android:Parcelable 不返回任何内容

python - 如何使用 python lambdas 捕获异常

arrays - avro 模式中的 optional 数组

java - 尝试用 Java 获取 XML 节点

MySql - 从每列中的最新非空值中获取一行

java - 如何在 Java 中创建 2 个框架并将它们链接在一起?

java - 无法从 POJO 生成 Json 架构

java - Java 中的属性文件监听器?

haskell - 一旦捕获异常,如何停止评估函数列表

java - C++、Java 和 JavaScript 异常处理之间有什么区别?