sev*_*een 2 java lambda java-8
我正在检查JDK 8 API和内部Function接口我注意到身份功能
static <T> Function<T, T> identity() {
return t -> t;
}
Run Code Online (Sandbox Code Playgroud)
这解决方法:
R apply(T t);
Run Code Online (Sandbox Code Playgroud)
在同一个Function界面声明.
问题是t -> t部分有效的原因.
如果我们根据熟悉的匿名内部类扩展这个表达式
new Function<String, String>() {
@Override
String apply(String t) {
t; // Oops, compilation error
}
}
Run Code Online (Sandbox Code Playgroud)
是t -> t一种捷径t -> { return t; }吗?
问题是
t -> t部分有效的原因.
因为lambda表达式可以返回它作为参数所采用的值.的return在右边部分从lambda表达式的目标类型暗示.表达式基本相同:
t -> { return t; }
Run Code Online (Sandbox Code Playgroud)
这意味着t -> t对于具有void返回类型的方法的功能接口将失败,如下例所示:
Consumer<String> consumer = t -> t;
Run Code Online (Sandbox Code Playgroud)
那里有lambda的目标类型Consumer<T>,它有方法 - void accept(T t)在其中.由于该方法具有void返回类型,因此上述分配失败.
您可以通过Lambda状态获得更多信息.
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |