我有来自与某些API相关的第三方的示例代码。由于返回语句中存在未处理的异常,因此无法运行。
问题:返回类型是一个接口,其实例始终使用复杂的工厂创建(假设我无权访问这些实例)。因此,即使我以愚蠢的do-nothing方式处理异常,我仍然无法返回有效的虚拟对象。
public FunnyInterface calculateSomething()
{
return builder.someFunnyInterface(); // throws Exception
}
要运行此代码,我可以不涉及任何内容:
calculateSomething()
的路径上的代码
答案 0 :(得分:0)
由于您写道,您无法调用构建器,我猜您对FunnyInterface
类型的值不感兴趣,因此只需返回null
。
public FunnyInterface calculateSomething() {
try {
return builder.someFunnyInterface(); // throws Exception
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
或者只是
public FunnyInterface calculateSomething() {
return null;
}
答案 1 :(得分:0)
我建议在RuntimeException中包含一个简单的rethrow,这样你就不需要声明一个已检查的异常:
// Dummy mockup interface + function
public static interface FunnyInterface {}
public static FunnyInterface builder_someFunnyInterface() throws Exception { return null; }
public FunnyInterface calculateSomething() {
try {
return builder_someFunnyInterface(); // throws Exception
} catch (Exception e) {
throw new RuntimeException(e);
}
}
我不会返回null。如果您没有一种有意义的方法来处理错误,请将其向上传播到具有处理错误的有意义方法的级别。如果你确实想要返回null / empty,那么使用Optional,否则抛出一个未经检查的RuntimeException是可取的。