zoukankan      html  css  js  c++  java
  • Java1.8 JDK源码中,对两个类进行 按位与 操作是什么意思

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

    源码如下:

            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);
    }


    回答如下:

    这不是按位与,是Java8的新语法,表示同时满足两个类(接口)。相当于:

    return (Comparator<Map.Entry<K, V>>) (Serializable)
       (c1, c2) -> c1.getKey().compareTo(c2.getKey());

    第二个问题,equals方法在Object中已经实现了。之所以在Comparator中“多此一举”列出来,主要是为了提醒而不是强制,因为Object中的默认实现可能是不合适的,很多时候需要修改。

  • 相关阅读:
    腰颈椎病康复运动治疗
    丹田呼吸简易教程
    丹田呼吸法
    GNU 汇编语言
    openssl命令简介
    AES128 + cbc + pkcs7 编码C语言实现
    一些linux下的性能监测工具
    git 基本使用教程
    【译】UI设计基础(UI Design Basics)--导航(Navigation)(六)
    【译】UI设计基础(UI Design Basics)--启动与停止(Starting and Stopping)(五)
  • 原文地址:https://www.cnblogs.com/qiumingcheng/p/10022672.html
Copyright © 2011-2022 走看看