Ami*_*era -1 java lambda java-8 functional-interface
我正在做一些lambda表达式的实验,看到了一些我无法理解的行为.
Consumer consumer = (o1) -> {};
Object obj1 = consumer; // this two line working fine
Run Code Online (Sandbox Code Playgroud)
2行以上的代码时,我分配预期不抱怨任何事情consumer来 obj1.
但是,当我尝试将lambda直接分配给对象时,它开始给我一个编译错误.
Object obj2 = (o1) -> {}; // this line gives compilation error
Run Code Online (Sandbox Code Playgroud)
上面的代码行给出了一个错误:
此表达式的目标类型必须是功能接口.
我的问题是为什么我们不能直接将lambda分配给类型的引用变量Object?
编辑:我已经编辑了我的问题,因为有一个类似的问题已经提到但我的问题主要目标是确保为什么Object o1 = "Hello"会工作但不是lambda.
如果将lambda表达式赋给类型的变量Object,编译器不知道这个lambda表达式应该实现哪个函数接口.
例如,lambda表达式o -> o.toString ()可以分配给a Consumer或a Function:
Consumer<String> cons = o -> o.toString ();
Function<String,String> cons2 = o -> o.toString ();
Run Code Online (Sandbox Code Playgroud)
因此,您必须将lambda表达式分配给功能接口类型的变量,或者在将lambda表达式赋值给Object变量之前将其转换为某种功能接口类型.
| 归档时间: |
|
| 查看次数: |
462 次 |
| 最近记录: |