java - 调用抛出异常的方法的 Lambda 返回方法

标签 java exception methods return throw

我有以下问题。 我在 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 .

enter image description here

现在,你有两个选择

  • 处理 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/

相关文章:

.net 框架过时的方法 - 它们什么时候会被删除?

java - 如何在没有关系的情况下连接多个表

java - 检查条件安全性并在同一 if 语句中进行评估

Java 按条件用空格分割

c++ - 在 opencv_core310.dll 中使用 findContours 函数时,OpenCV 抛出未处理的异常

python - 即使出现 IOError,如何继续 python 脚本循环?

python - 将 ElementTree 转换为 Element

java - GridBagLayout 单元格中对象的对齐方式

android - Android中的HtmlUnit错误:任务执行失败: 'app:preDexDebug'

java - 在另一个方法中使用主要方法中的变量