Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试捕获场景-是否正确使用“已检查”_Java_Try Catch - Fatal编程技术网

Java 尝试捕获场景-是否正确使用“已检查”

Java 尝试捕获场景-是否正确使用“已检查”,java,try-catch,Java,Try Catch,我正在研究一个代码库,其中域模型由许多嵌套的成员变量组成 考虑一下这个场景 private static String getSomeStringRepresentation(A input) { String result = ""; try { result = input.getTypeA().getTypeAInfo().get(0).getRepresentation(); } catch (NullPointerException e) {

我正在研究一个代码库,其中域模型由许多嵌套的成员变量组成

考虑一下这个场景

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是正当的吗?
这里的问题是对可能为null的对象调用某个方法

NullPointerException表示编程错误,捕捉它是错误的。与其捕获它,不如修复程序中的错误。

为什么不检查null而不是放置catch块?捕获NullPointerException被认为不是好的实践


捕获NullPointerException不是一个好的做法,没有严重的原因: 而是像这样检查空对象:

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;
}

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

如果所有方法都可以抛出NullPointerException,为什么不使用try-catch案例是不正确的呢?基本上,我不认为做不同的事情很好!=空检查:)。@hajder这可能不太好,但如果您使用的是第三方库,那么最好明确使用空检查。抱歉,如果我有点不清楚,没有一个方法会抛出NPE。可能导致异常的是,如果对null对象调用了方法,那么肯定会出现NullPointerException。