在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; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |