我有以下问题。
我在method 1
内工作,此method 1
应该返回某个类的对象。
对于我的return语句,我调用另一个method 2
(当然,它返回所述类的对象)。尽管其他method 2
引发异常。我应该如何在我的初始method 1
中写出退货声明?
喜欢吗?
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吗?还是我应该用完全不同的方式写这个?
答案 0 :(得分:4)
编辑。你写了
基本上通常不应该抛出异常
这是RuntimeException
的完美用例。这基本上是一个透明的例外。您的代码的用户看不到它,但是当发生异常情况时,它看起来就像是一个疯狂的Pokemon,它将使您的应用程序停止运行,从而有机会对其进行修复。
您的标准代码流不会受到影响,并且您将避免返回一个null
值。
Lambda 表达式不允许抛出选中的Exception
。
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
,使用自定义的。