来自 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
界面。
但是,在 Actor 阵容中一起使用让我感到莫名其妙。
& Serializable
的目的是什么?如果返回类型不需要它?
我不明白这个意图。
跟进欺骗/关闭请求:这个问题 How to serialize a lambda?不回答问题。我的问题特别指出返回类型没有提到 Serializable
,因此我感到困惑。
最佳答案
Comparator.comparing()
的 javadoc说:
The returned comparator is serializable if the specified function is also serializable.
强制转换确保 Java 用来实现 lambda 的内部类将实现 Serializable
。
关于java - 为什么 Java 8 的 Comparator.comparing() 会将返回值强制转换为 Serializable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41500021/