java - 为什么 Java 8 的 Comparator.comparing() 会将返回值强制转换为 Serializable?

标签 java casting

来自 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/

相关文章:

java - 在 Netty ServerSocket 中获取主线程

java - 简单 Java 代码中的意外运行时错误位置

java - Maven settings.xml 未使用

c++ - timeval 到字符串(在两者之间转换)

java - 将参数传递给在 bat 文件中调用的 jar 文件?

java - 重载java

swift - 使用变量类型进行类型转换

java - 类型转换中的模棱两可的行为

generics - 未经检查的通用类类型IDE警告的转换

c++ - 实现 C++ 状态机。如何解决 Wpmf 转换警告?