`

Guava Objects

阅读更多

  java中所有的类都继承了Object类,当有需求时, 会重写equals, hashCode, toString方法,guava提供了Objects类简化了这些操作

 

1 equals 

   jdk要求对equals的重写要符合一下几点:

   1. 自反性reflexive:任何非空引用x,x.equals(x)返回为true;

   2. 对称性symmetric:任何非空引用x和y,x.equals(y)返回true当且仅当y.equals(x)返回true;

   3. 传递性transitive:任何非空引用x和y,如果x.equals(y)返回true,并且y.equals(z)返回true,那么x.equals(z)返回true;

   4. 一致性consistent:两个非空引用x和y,x.equals(y)的多次调用应该保持一致的结果,(前提条件是在多次比较之间没有修改x和y用于比较的相关信息);

   5. 对于所有非null的值x, x.equals(null)都要返回false。 (如果你要用null.equals(x)也可以,会报NullPointerException)。

 

   基于以上要求可知,当我们要重写equals方法时,要进行非空判断, guava的Objects提供了equal方法,可支持参数为null的判断,判断的是否相等的已经还是根据对象的equals方法,只不过在

   Objects的equal方法里做了null的判断

   下面是一个demo

 

class User {

    private String username;

    private String sex;

    public User (String username, String sex) {
        this.username = username;
        this.sex = sex;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (sex != null ? !sex.equals(user.sex) : user.sex != null) return false;
        if (username != null ? !username.equals(user.username) : user.username != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return Objects.hashCode(this.getUsername(), this.getSex());
    }

    @Override
    public String toString () {
        return Objects.toStringHelper(this.getClass()).add("username", this.getUsername())
                .add("sex", this.getSex())
                .toString();
    }

    public User () {

    }

    void setUsername(String username) {
        this.username = username;
    }

    void setSex(String sex) {
        this.sex = sex;
    }

    String getUsername() {

        return username;
    }

    String getSex() {
        return sex;
    }
}   
 public static void main (String[] args) {
        System.out.println(Objects.equals(null, null));
        System.out.println(Objects.equals("a", null));
        System.out.println(Objects.equals(null, "a"));
        System.out.println(Objects.equals("a", "a"));

        User u1 = new User("malone", "man");
        User u2 = new User("malone", "man");
        System.out.println(Objects.equals(u1, u2));
        System.out.println(Objects.equals(u1, u1));

        System.out.println(Objects.equals(u1, u2));
        System.out.println(Objects.hash(null, null));
        System.out.println(Objects.hash(null, null));
        System.out.println(Objects.hash(u1, u2));
    }

 

 

2 hashCode方法:

   由于jdk约定两个对象equals返回true,那么他们的hashCode也应该相同,当我们去重新hashCode的时候总不知道怎么写好,guava的Objects提供了hashCode方法,支持多个对象输入,

以上面的User类来说,我们重写了equals方法,只要用户名和性别相同,那么两个对象就相同,我们这里可以这样重写hashCode,保证equals返回true时,hashCode返回的值相同

 

    @Override
    public int hashCode() {
        return Objects.hashCode(this.getUsername(), this.getSex());
    }

 

 

3  toStringHelper

    重写toString方法很别扭,想体现对象多个属性的值,Objects提供了一个toStringHelper方法来简化这个操作:

    @Override
    public String toString () {
        return Objects.toStringHelper(this.getClass()).add("username", this.getUsername())
                .add("sex", this.getSex())
                .toString();
    }

 

 

分享到:
评论

相关推荐

    guava-23.0.zip guava.jar guava

    7. **检查类**:Preconditions、Objects等类提供了参数检查和对象验证功能,有助于防止程序中的错误。 8. **随机数生成**:Guava的Randomness类提供了更安全、更可控的随机数生成器。 9. **时间处理**:Guava提供...

    不加密Google Guava视频教程.txt

    ├─Google Guava 第04讲-Objects&MoreObjects;&ComparisonChain;.wmv ├─Google Guava 第05讲-Strings&Charsets;&CharMatcher;.wmv ├─Google Guava 第06讲-Guava之函数式接口(非常类似Java8,熟悉的可以不看)....

    eclipse-guava-插件

    3. 使用`toStringHelper`:在你需要自动生成`toString()`的方法内,引入`com.google.common.base.MoreObjects`类,然后调用`toStringHelper(this)`方法,接着为每个字段调用`add()`或`addValue()`,最后使用`...

    Google-guava 19.0

    Guava还包含了一些通用工具类,如Preconditions(用于抛出异常)、Objects(比较对象)、CacheBuilder(构建缓存)等,帮助开发者编写更健壮的代码。 综上所述,Google Guava 19.0版本以其丰富的功能和高效的设计,...

    guava 23.0

    7. **检查类**:Preconditions、Objects等类提供了预条件检查和对象验证,有助于在早期发现潜在的编程错误。 8. **事件监听**:EventBus是一种轻量级发布/订阅事件系统,可以帮助实现组件间的松耦合通信。 9. **...

    guava学习知识点

    - **Objects**:提供了更简洁的 `hashCode()` 和 `toString()` 实现,以及其它实用的 Object 工具方法。 - **Sorting**:提供强大的 fluent Comparators,支持多关键字排序。 - **Throwables**:简化异常处理和...

    guava-18.0

    7. **预定义的常量和实用方法**:如Charsets、Preconditions、Objects等类,提供了大量的实用方法和预定义常量,减少了重复代码,提高了代码质量。 8. **原生类型支持**:Guava提供了对基本类型的泛型支持,如Ints...

    modernizer-maven-plugin:检测旧版Java API的使用

    例如,Modernizer可以检测使用Vector而不是ArrayList , String.getBytes(String)而不是String.getBytes(Charset)以及Guava Objects.equal而不是Java 7 Objects.equals 。 默认配置检测 ,包括第三方库,如 , 和 ...

    Guava_for_Netflix

    以 Person 类为例,Guava 的 Objects 类可以帮助开发者简洁地实现一个对象的 equals 方法,通过 Objects.equal() 方法来比较对象的字段,并通过 Objects.hashCode() 方法来生成一个合适的哈希码,提高了代码的可读性...

    Guava学习-----弱鸡晋级之路

    2. **Objects**: Guava 的 `Objects` 工具类是对 Java 标准库中的 `Object` 类进行增强。它提供了如 `equal(a, b)`(比较两个对象是否相等,考虑了 `null` 情况)、`hashCode(obj)`(返回对象的哈希码,即使对象为 `...

    guava-18.rar

    除了上述功能,Guava还包括事件监听(EventBus)、反射工具(ReflectiveOperationException)、枚举集(ImmutableEnumSet)以及各种实用的常量类(如Preconditions、Objects等)。这些工具和类的设计都遵循了简洁、...

    AnOverviewofGuavaSVJUGSept2012

    2. Objects.toStringHelper():这个方法使得实现Object类的toString()方法变得更为简单和干净。可以通过添加键值对来构建字符串,并且可以选择省略值为null的键值对。 3. Stopwatch:这是一个在性能测试和度量代码...

    guanva JAR包,资源包

    9. **类和对象工具**:如Immutable类(不可变对象)、Objects类(对象比较和哈希)等,简化了对类和对象的操作。 10. **事件监听**:Guava的 EventBus 可以帮助实现简单的发布/订阅事件模型,使组件之间的通信更加...

    java各种功能集合和工具.rar

    Guava提供的工具类 Apache common-Collection提供的工具类 JDK提供的工具类 Arrays Collections Objects Arrays是操作数组对象的工具类 Collections是操作集合对象的工具类 Objects是操作引用数据类型对象的工具...

    不可变对象ImmutableXXX:Collection、List、Set、Map…

    在Java编程中,不可变对象(Immutable Objects)是一种一旦创建后就不能被修改的对象。这种特性在多线程环境中尤其重要,因为不可变对象是线程安全的,它们不会因为并发修改而引发数据不一致的问题。Guava库是Google...

    rest jersey 所必须的jar包

    7. **jersey-guava.jar**:Jersey可能依赖于Guava库来提供某些功能,如缓存或者并发工具。 8. **hk2-api.jar, hk2-utils.jar, aopalliance-repackaged.jar, hk2-locator.jar, hk2-runlevel.jar**:这些是HK2依赖...

    复杂对象的比较

    Java社区提供了一些工具类和库来简化对象比较,例如Apache Commons Lang的`EqualsBuilder`和`HashCodeBuilder`,或者Google的Guava库中的`Objects.equal()`和`Objects.hashCode()`。 在实际编程中,确保复杂对象的...

    equalizer:Java Helper类创建漂亮的equals方法

    有一些替代方案,例如commons-lang,guava或Object.equals,但是都存在相同的问题: @Overridepublic boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if ...

    java常用工具类整理

    6. com.google.common.base.Objects 对象工具类,常用的方法有 toStringHelper()、hashCode() 等。 7. com.google.common.collect.FluentIterable 迭代器工具类,常用的方法有 filter()、transform() 等。 8. ...

    ReflectiveToStringHelper:像 ToStringHelper 但反射!

    您可能听说过 ToStringHelper,这是 Google Guava 项目 (MoreObjects#toStringHelper) 中的一个很棒的工具。 这不是那个。 不过,它非常相似。 ReflectiveToStringHelper(或只是 RTSH – arr tush)使用 Java 的...

Global site tag (gtag.js) - Google Analytics