Java 比较器中比较器和可串行化之间的按位and。比较
我正在查看Java 比较器中比较器和可串行化之间的按位and。比较,java,java-8,comparator,Java,Java 8,Comparator,我正在查看比较器的源代码 这是密码 public static <T, U> Comparator<T> comparing( Function<? super T, ? extends U> keyExtractor, Comparator<? super U> keyComparator) { Objects.requireNonNull(keyExtractor); Objects.requir
比较器的源代码
这是密码
public static <T, U> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor,
Comparator<? super U> keyComparator)
{
Objects.requireNonNull(keyExtractor);
Objects.requireNonNull(keyComparator);
return (Comparator<T> & Serializable)
(c1, c2) -> keyComparator.compare(keyExtractor.apply(c1),
keyExtractor.apply(c2));
}
它可以简单地铸造到比较器
进行链接
此外,在非数值的情况下,逐位运算是如何工作的
谢谢。这不是类型之间的按位操作,而是交叉类型,向编译器表明,当它生成与lambda表达式相对应的类型时,该类型应实现比较器
和可序列化
接口。在这种情况下,single&不是按位运算符。它是类型Comparator和Serializable的交集。您断言希望返回类型同时实现Comparator和Serializable。这里的技巧是,只要交集只产生一个抽象方法,就可以使用接口的交集。看见
按位运算符(&,^,|)可用于比较布尔类型和数字类型,但这里不是这样。参见相关:也相关:
(Comparator<T> & Serializable)