AutoValue

作者: 背影杀手不太冷 | 来源:发表于2016-06-24 10:24 被阅读52次

标签(空格分隔): Android


在此之前先要了解hashcode()、equals()、compareTo()、toString()
1、首先是两个引用比较时用的:==和!= 这两个符号在比较引用时,比较的是内存地址,这个地址是这两个引用对应的类的hashCode()的值吗???
2、每个类的equals()默认是比较内存地址,而不是比较对象内容。所以自定义的类一般都要重写equals()后,这样调用A.equals(B)后才能比较内容。否则是判断内存地址,

具体例子请看参考博客

当equals()被重写时,通常有必要重写 hashCode 方法,
【因为这样如果我们对一个对象重写了euqals,意思是只要对象的成员变量值都相等那么euqals就等于true,但不重写hashcode,那么我们再new一个新的对象,
当原对象.equals(新对象)等于true时,两者的hashcode却是不一样的,由此将产生了理解的不一致,如在存储散列集合时(如Set类),将会存储了两个值一样的对象,
导致混淆,因此,就也需要重写hashcode()】
以维护 hashCode 方法的常规协定,该协定声明相等对象必须具有相等的哈希码。如下:
(1)当obj1.equals(obj2)为true时,obj1.hashCode() == obj2.hashCode()必须为true
(2)当obj1.hashCode() == obj2.hashCode()为false时,obj1.equals(obj2)必须为false

如int,float等)和String类(因为该类已重写了equals和hashcode方法)对象时,默认比较的是值,

hashcode是用于散列数据的快速存取,如利用HashSet/HashMap/Hashtable类来存储数据时,都是根据存储对象的hashcode值来进行判断是否相同的。

总结:
自定义类要重写equals方法来进行等值比较,自定义类要重写compareTo方法来进行不同对象大小的比较,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable类时进行比较.如果有特殊格式的输出,还得覆盖toString()方法,如对象传递给printf等输出函数或者传递给assert断言或者用“+”连接时。


使用AutoValue拯救你的代码###

首先引入依赖库

dependencies {
  apt 'com.google.auto.value:auto-value:1.2'
}

然后剩下的步骤请参考博客

相关文章

  • Android Model正确使用姿势——AutoValue

    Android Model正确使用姿势——AutoValue [TOC] 最近看到几篇博客是关于AutoValue...

  • AutoValue_index

    AutoValue谷歌auto库为Java1.6+生成不可变value class "AutoValue is a...

  • 安利AutoValue第二波

    安利AutoValue第二波 简介 前面介绍了如何使用AutoValue如何使用, 参见这里Android Mod...

  • AutoValue介绍

    什么是AutoValue? AutoValue是一个可以自动为值类(value type)生成诸如equals,h...

  • AutoValue_AutoValue with Builder

    原文 AutoValue 的 构建者 AutoValue的介绍 (简单翻译)中已经包含了基本的使用,使用静态工...

  • AutoValue扩展(Extension)

    什么是AutoValue Extension? 如之前所说AutoValue是一个编译期生成样板代码的代码生成器,...

  • AutoValue

    标签(空格分隔): Android 在此之前先要了解hashcode()、equals()、compareTo()...

  • AutoValue

    Google 的开源项目,用于自动补全生成 Java 模板代码,包括以下代码的自动生成: equals hashC...

  • Android Model正确使用姿势——AutoValue

    Android Model正确使用姿势AutoValue 前言 简介 简单使用 ImmutableValue ty...

  • Google AutoValue 测试

    代码 https://github.com/wdxxl/AutoValueTest 昨天看到原来同事居然pull ...

网友评论

      本文标题:AutoValue

      本文链接:https://www.haomeiwen.com/subject/emyodttx.html