【发布时间】:2017-01-06 06:15:13
【问题描述】:
来自JDK8的Comparator.java:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
请注意,return 语句的前缀是一个有趣的转换:(Comparator<T> & Serializable)
我已经知道并且(我认为)理解:
- 泛型类型限制中的
&运算符(并且可以在此处推断其用途), -
Serializable接口。
但是,在演员阵容中一起使用让我感到莫名其妙。
如果返回类型不需要& Serializable,它的用途是什么?
我不明白意图。
跟进欺骗/关闭请求:此问题How to serialize a lambda? 不回答问题。我的问题特别指出返回类型没有提及Serializable,因此是我困惑的根源。
【问题讨论】:
-
返回类型不是问题。将其转换为
Serializable使其可序列化。此方法强制转换以允许调用者选择序列化结果。