问题描述
你能帮忙在 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 }