我有以下问题。
我在 method 1
中工作,这个 method 1
应该返回某个类的对象。
对于我的 return 语句,我调用了另一个 method 2
(它当然会返回所述类的一个对象)。尽管此其他方法 2
抛出异常。我应该如何在我的初始方法 1
中编写我的 return 语句?
像这样?
public class testClass {
public testClass() {
}
public <T> T method1(parameter1, ...) {
if(parameter1) {
return () -> {
try {
method2(parameter1, parameter2...);
}
catch (CloneNotSupportedException ex) {
System.err.print("Error while cloning programmer");
}
};
} else {
return null;
}
}
但我想如果我这样做它只会返回 null? 我应该把 return null 放在最后一个括号之后吗?或者我应该用完全不同的方式写这个吗?
最佳答案
编辑。你写了
Basically normally the exception should never be thrown
这是 RuntimeException
的完美用例.它基本上是一个透明的异常(exception)。您的代码的用户不会看到它,但当发生异常情况时,它会像野生口袋妖怪一样出现,并会使您的应用程序停止运行,让您有机会修复它。
您的标准代码流不会受到影响,您将避免返回 null
值(value)。
Lambda 表达式不允许抛出检查 Exception
s.
CloneNotSupportedException
延伸Exception
.
现在,你有两个选择
- 处理
Exception
就地,就像你做的那样 - 传播
Exception
通过将其包装在RuntimeException
中
return () -> {
try {
method2(parameter1, parameter2...);
} catch (final CloneNotSupportedException e) {
throw YourCustomRuntimeException("Error while cloning", e /* Original cause */);
}
};
这取决于用例,但我认为 CloneNotSupportedException
表示错误,这对开发人员来说应该是显而易见的。所以让它浮出水面。
自定义Exception
只需要扩展 RuntimeException
,并可能提供额外的字段来存储相关数据。
YourCustomRuntimeException extends RuntimeException { ... }
不要扔基地RuntimeException
, 使用自定义的。
关于java - 调用抛出异常的方法的 Lambda 返回方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55189466/