【问题标题】:Casting to Serializable in Comparator.comparing [duplicate]在 Comparator.comparing 中转换为 Serializable [重复]
【发布时间】:2017-08-14 22:42:24
【问题描述】:

查看java.util.Comparator in the JDK 8 source code,发现了有趣的代码:

public static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor){
        Objects.requireNonNull(keyExtractor);
        // casting to Serializable?
        return (Comparator<T> & Serializable)
            (c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
    }

很清楚为什么我们将生成的 lambda 转换为 Comparator&lt;T&gt;,但将其转换为 Serializable 的目的是什么?

【问题讨论】:

标签: java generics lambda java-8 comparator


【解决方案1】:

这就是 使 lambda 根据我所知道的可序列化。

【讨论】:

  • 完全正确。但目的是什么?
  • @AndriiAbramov 我假设这与您序列化某些使用比较器的类型有关。比如说TreeSetPriorityQueue
  • @AndriiAbramov,所以显然之前有人问过,刚刚找到它:stackoverflow.com/questions/8642012/…
  • 嗯.. 是的。这是有道理的。我将关闭这个作为重复。不过,+1!
  • @AndriiAbramov 你也可以接受 :)
猜你喜欢
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-26
  • 2012-10-20
  • 1970-01-01
  • 2012-05-17
相关资源
最近更新 更多