Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 比较器中比较器和可串行化之间的按位and。比较_Java_Java 8_Comparator - Fatal编程技术网

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)