开发者社区> 问答> 正文

Java1.8 JDK源码中对两个类进行 按位与 操作是什么意思?

Java容器类库中的Map接口(javautilMap.java)中有一个Entry接口(javautilMap.java),其中有几个接口方法用到了类和类的按位与操作,即类和类之间有 & 操作符,后面是一个lambda表达式,如下图:
screenshot
源码如下:

   public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() {
            return (Comparator<Map.Entry<K, V>> & Serializable)
                (c1, c2) -> c1.getKey().compareTo(c2.getKey());
        }

请问:
1)对两个类进行按位与操作时什么意思?
2)Comparator接口(javautilComparator.java)有两个未实现方法,一个传入一个参数,一个传入两个参数,该lambda表达式是怎么工作的?只实现了一个方法就可以使用吗?Comparator部分源码如下:

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
}

展开
收起
蛮大人123 2016-03-11 10:15:53 2784 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    这不是按位与,是Java8的新语法,表示同时满足两个类(接口)。相当于:
    return (Comparator<Map.Entry<K, V>>) (Serializable)
    (c1, c2) -> c1.getKey().compareTo(c2.getKey());
    第二个问题,equals方法在Object中已经实现了。之所以在Comparator中“多此一举”列出来,主要是为了提醒而不是强制,因为Object中的默认实现可能是不合适的,很多时候需要修改。

    2019-07-17 18:58:33
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载