3

我正在查看域模型由许多嵌套成员变量组成的代码库。

考虑这种情况

private static String getSomeStringRepresentation(A input) {
    String result = "";
    try {
         result = input.getTypeA().getTypeAInfo().get(0).getRepresentation();
    } catch (NullPointerException e) {
        Logger.logDebug(e.getMessage());
    }
    return result;
}

在此调用链中,任何方法调用都可能导致 NullPointerException。在这种情况下使用 catch 子句处理它是否正确?这是“可以处理异常”的情况吗?

编辑

四次检查null的情况真的很丑。您不认为在这种情况下捕获 NPE 是合理的吗?

这里的问题是在一个可能为空的对象上调用一些方法。

4

4 回答 4

4

为什么不检查 null 而不是放置一个 catch 块?捕获 NullPointerException 不被认为是好的做法。

如果捕获空指针异常不是一个好习惯,那么捕获异常是一个好习惯吗?

捕获空指针异常是代码异味吗?

于 2013-04-26T07:59:49.210 回答
2

如果没有严重的原因,捕获 NullPointerException 不是一个好习惯:而是像这样检查 null 对象:

private static String getSomeStringRepresentation(A input) {
    String result = "";
    try {
         if(input != null && input.getTypeA() != null && input.getTypeA().getTypeAInfo() != null && getTypeAInfo().get(0) != null){
              result = input.getTypeA().getTypeAInfo().get(0).getRepresentation();     
         }

    } catch (NullPointerException e) {
        Logger.logDebug(e.getMessage());
    }
    return result;
}

这是该主题的可能重复项。

于 2013-04-26T08:02:32.387 回答
1

NPE 只是代码中的一个错误,因此不应被捕获 - 它们应该被修复。

于 2013-04-26T08:03:01.703 回答
0

NullPointerException 表示编程错误,捕获它是错误的。而不是抓住它来修复程序中的错误。

于 2013-04-26T07:59:48.270 回答