在以下代码中:
interface Callback {
void greet(String greeting);
}
private static <T extends Callback & Serializable> void greetMe(T callback) {
callback.greet("Hello world!");
}
public static void main(String[] args) {
greetMe(greeting -> System.out.println(greeting));
}
以下行无法编译,因为lambda不是 Serializable :
greetMe(greeting -> System.out.println(greeting));
我的问题是,是否存在使lambda实现Serializable的语法糖,或者我是否必须使其成为非匿名类?
答案 0 :(得分:1)
来自JLS 15.16. Cast Expressions:
强制转换可用于显式“标记”具有特定目标类型的lambda表达式或方法引用表达式。为了提供适当程度的灵活性,目标类型可以是表示交叉点类型的类型列表,只要交集引入功能接口(第9.8节)。
您可以将其直接投射到Serializable
:
greetMe((Callback & Serializable) greeting -> System.out.println(greeting));