• [Guava源码分析]Objects 和 ComparisonChain:帮助重写Object方法


    我的技术博客经常被流氓网站恶意爬取转载。请移步原文:http://www.cnblogs.com/hamhog/p/3874194.html,享受整齐的排版、有效的链接、正确的代码缩进、更好的阅读体验。

    用来帮助重写Object的equals、hashCode、toString和compareTo方法的两个类。用法见文档

    Objects

    API

    -equal 考虑null情况的equals
    -hashCode(x,y,z,...) hashCode组合,用来重写hashCode方法
    -toStringHelper 用法:
    // Returns "ClassName{x=1}"
    Objects.toStringHelper(this)
    .omitNullValues()
    .add("x", 1)
    .add("y", null)
    .toString();
    }
    用来重写toString方法
    -firstNonNull 用来设置为null时的默认值

    重点方法

    ToStringHelper
    1.链式调用 每个方法返回的都是自身引用。底层是一个链表{name,value,next}
    2.toString方法 遍历链表
    // create a copy to keep it consistent in case value changes
    boolean omitNullValuesSnapshot = omitNullValues;
    为用到的成员变量做一个snapShot,防止在方法途中改变

    ComparisonChain

    用法

    public int compareTo(Foo that) {
    return ComparisonChain.start()
    .compare(this.aString, that.aString)
    .compare(this.anInt, that.anInt)
    .compare(this.anEnum, that.anEnum, Ordering.natural().nullsLast())
    .result();
    }

    API

    -start()
    -compare(a,b) compare(T,T,Comparator) compareTrueFirst compareFalseFirst

    重点方法

    1.构造 单例模式,3个单例 ACTIVE GREATER LESS;ACTIVE会进行比较,GREATER/LESS直接返回
    2.链式调用 分出胜负则返回GREATER/LESS 否则返回ACTIVE

  • 相关阅读:
    application/json 四种常见的 POST 提交数据方式
    物联网应用中实时定位与轨迹回放的解决方案 – Redis的典型运用(转载)
    C#的四种Timer介绍
    用python绘制趋势图
    Python 图形界面元素
    python 异常和弹出框
    python爬虫
    python文件操作
    GUI输入数据并保存
    图形界面+声音播放
  • 原文地址:https://www.cnblogs.com/hamhog/p/3874194.html
Copyright © 2020-2023  润新知