调用抛出异常的方法的 Lambda return 方法
Lambda return method which calls method that throws exception
我有以下问题。
我在 method 1
中工作,这个 method 1
应该 return 某个 class 的对象。
对于我的 return 语句,我调用了另一个 method 2
(当然 return 是所述 class 的一个对象)。尽管另一个 method 2
抛出异常。我应该如何在初始 method 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;
}
}
但我想如果我这样做只会 return 无效?
我应该把 return null 放在最后一个括号之后吗?或者我应该用完全不同的方式写这个吗?
编辑。你写了
Basically normally the exception should never be thrown
这是 RuntimeException
的完美用例。它基本上是一个透明的例外。您的代码的用户不会看到它,但当发生异常情况时,它会像野生口袋妖怪一样出现,并且会使您的应用程序停止,让您有机会修复它。
您的标准代码流不会受到影响,您将避免返回 null
值。
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
,使用自定义底座。
我有以下问题。
我在 method 1
中工作,这个 method 1
应该 return 某个 class 的对象。
对于我的 return 语句,我调用了另一个 method 2
(当然 return 是所述 class 的一个对象)。尽管另一个 method 2
抛出异常。我应该如何在初始 method 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;
}
}
但我想如果我这样做只会 return 无效? 我应该把 return null 放在最后一个括号之后吗?或者我应该用完全不同的方式写这个吗?
编辑。你写了
Basically normally the exception should never be thrown
这是 RuntimeException
的完美用例。它基本上是一个透明的例外。您的代码的用户不会看到它,但当发生异常情况时,它会像野生口袋妖怪一样出现,并且会使您的应用程序停止,让您有机会修复它。
您的标准代码流不会受到影响,您将避免返回 null
值。
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
,使用自定义底座。