Java 句柄对象映射程序异常和缺少返回语句

Java 句柄对象映射程序异常和缺少返回语句,java,exception,error-handling,Java,Exception,Error Handling,我正在考虑在catch块中抛出一个RuntimeException,以解决缺少的return语句 如何处理这种情况 我认为抛出某种异常而不是返回一些无意义的值 private String tryObjMapper(Object obj) { try { return objectMapper.writeValueAsString(obj); } catch (JsonProcessingException e) { e.printStackTra

我正在考虑在catch块中抛出一个
RuntimeException
,以解决缺少的return语句

如何处理这种情况

我认为抛出某种异常而不是返回一些无意义的值

private String tryObjMapper(Object obj) {
    try {
        return objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    //missing return statement
}

我认为最好的处理方法是在函数的catch块和末尾返回
null
。使用前,您必须检查返回者是否为
null

注意:只有当您不能更改函数的签名以声明它抛出异常时,此解决方案才适用。否则,请进行签名更新。

这取决于您希望作为回退/默认值或错误处理的内容

您有2个主要选项(包括2个子选项):

1.A.抛出异常:

private String tryObjMapper(Object obj) throws JsonProcessingException  {    
    return objectMapper.writeValueAsString(obj);
}
1.B.Rethrow
运行时异常
(或自定义未检查异常)

2.A.定义错误时的默认值

private String tryObjMapper(Object obj) {
    try {
        return objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return null;//or other default value
}
2.B.使用单个返回语句定义默认值:

private String tryObjMapper(Object obj) {
    String retVal = null;//or other default value
    try {
        retVal = objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return retVal ;
}

考虑使用logger而不使用e记录异常。printStackTrace()

取决于您希望成为什么样的回退/默认值可能会在捕获中抛出新的RuntimeException(e)或类似值。在该场景中,您不需要额外的返回。如果您无法处理那里的错误,请重新引发异常并让更高级别处理。可能
引发新的RuntimeException(String.format(“无法使用objectMapper将obj%s转换为字符串”,obj))简单地避免捕获异常并修改方法的签名以反映它可以抛出异常可能是有意义的
private String tryObjMapper(Object obj) {
    String retVal = null;//or other default value
    try {
        retVal = objectMapper.writeValueAsString(obj);
    } catch (JsonProcessingException e) {
        e.printStackTrace();
    }
    return retVal ;
}