加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

在Java 8中使用Lambda进行异常处理

发布时间:2020-12-15 04:20:32 所属栏目:Java 来源:网络整理
导读:我正在使用lambda表达式进行一些测试,但我的代码不能编译.我的lambda实现是错误的还是异常处理?以下代码的正确实现是什么? class MyObject { }interface CreatableT { T create() throws IOException;}/* Using the code: */CreatableMyObject creator = (
我正在使用lambda表达式进行一些测试,但我的代码不能编译.我的lambda实现是错误的还是异常处理?以下代码的正确实现是什么?

class MyObject { }

interface Creatable<T> {
    T create() throws IOException;
}

/* Using the code: */
Creatable<MyObject> creator = () ->  {
    try {
        return new MyObject();
    } catch (IOException e) {
        e.printStackTrace();
    }
};

MyObject obj1 = creator.create();

如果我删除try catch块并声明抛出该方法的异常,代码将编译并正常运行.

Creatable<MyObject> creator = () -> new MyObject();

编译错误是:

不兼容的类型:lambda表达式中的错误返回类型

解决方法

你的lambda需要返回一个MyObject.如果try块成功完成就是这种情况,但如果不成功则执行catch块而不返回任何内容.所以你可以写:

Creatable<MyObject> creator = () ->  {
    try {
        return new MyObject();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
};

但是接下来你会得到另一个编译错误:“在try块中永远不会抛出IOException”.所以你还需要在MyObject中有一个抛出IOException的构造函数:

class MyObject { MyObject() throws IOException {} }

最后,除非MyObject实际抛出异常,否则您可以简单地使用:

Creatable<MyObject> creator = () -> new MyObject();

你也可以写:

Creatable<MyObject> creator = MyObject::new;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读