如何解决lambda 表达式中的类型干扰
你能帮忙在 lambda 表达式中使用类型推断吗?我在下面给出了示例代码,如何将其转换为 lambda 表达式。
public <E> E convert(Object x,Object y) {
return (E) y;
}
解决方法
假设有以下功能接口(对 lambda 表达式的要求):
@FunctionalInterface
interface Converter {
<E> E convert(Object x,Object y);
}
方法 convert
不能通过 lambda 表达式表示,因为目标方法是通用的。此类 lambda 表达式的以下代码片段无法编译。
-
static <E> void foo() { Converter converter = (x,y) -> (E) y; // doesn't compile }
-
static void foo() { Converter converter = (x,y) -> (String) y; // doesn't compile }
您必须在接口级别指定泛型类型:
@FunctionalInterface
interface Converter<E> {
E convert(Object x,Object y);
}
现在可以使用 lambda 表达式了:
-
static <E> void foo() { Converter<E> converter = (x,y) -> (E) y; // compiles }
-
static void foo() { Converter<String> converter = (x,y) -> (String) y; // compiles }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。