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(); }
相关推荐
7. **检查类**:Preconditions、Objects等类提供了参数检查和对象验证功能,有助于防止程序中的错误。 8. **随机数生成**:Guava的Randomness类提供了更安全、更可控的随机数生成器。 9. **时间处理**:Guava提供...
├─Google Guava 第04讲-Objects&MoreObjects;&ComparisonChain;.wmv ├─Google Guava 第05讲-Strings&Charsets;&CharMatcher;.wmv ├─Google Guava 第06讲-Guava之函数式接口(非常类似Java8,熟悉的可以不看)....
3. 使用`toStringHelper`:在你需要自动生成`toString()`的方法内,引入`com.google.common.base.MoreObjects`类,然后调用`toStringHelper(this)`方法,接着为每个字段调用`add()`或`addValue()`,最后使用`...
Guava还包含了一些通用工具类,如Preconditions(用于抛出异常)、Objects(比较对象)、CacheBuilder(构建缓存)等,帮助开发者编写更健壮的代码。 综上所述,Google Guava 19.0版本以其丰富的功能和高效的设计,...
7. **检查类**:Preconditions、Objects等类提供了预条件检查和对象验证,有助于在早期发现潜在的编程错误。 8. **事件监听**:EventBus是一种轻量级发布/订阅事件系统,可以帮助实现组件间的松耦合通信。 9. **...
- **Objects**:提供了更简洁的 `hashCode()` 和 `toString()` 实现,以及其它实用的 Object 工具方法。 - **Sorting**:提供强大的 fluent Comparators,支持多关键字排序。 - **Throwables**:简化异常处理和...
7. **预定义的常量和实用方法**:如Charsets、Preconditions、Objects等类,提供了大量的实用方法和预定义常量,减少了重复代码,提高了代码质量。 8. **原生类型支持**:Guava提供了对基本类型的泛型支持,如Ints...
例如,Modernizer可以检测使用Vector而不是ArrayList , String.getBytes(String)而不是String.getBytes(Charset)以及Guava Objects.equal而不是Java 7 Objects.equals 。 默认配置检测 ,包括第三方库,如 , 和 ...
以 Person 类为例,Guava 的 Objects 类可以帮助开发者简洁地实现一个对象的 equals 方法,通过 Objects.equal() 方法来比较对象的字段,并通过 Objects.hashCode() 方法来生成一个合适的哈希码,提高了代码的可读性...
2. **Objects**: Guava 的 `Objects` 工具类是对 Java 标准库中的 `Object` 类进行增强。它提供了如 `equal(a, b)`(比较两个对象是否相等,考虑了 `null` 情况)、`hashCode(obj)`(返回对象的哈希码,即使对象为 `...
除了上述功能,Guava还包括事件监听(EventBus)、反射工具(ReflectiveOperationException)、枚举集(ImmutableEnumSet)以及各种实用的常量类(如Preconditions、Objects等)。这些工具和类的设计都遵循了简洁、...
2. Objects.toStringHelper():这个方法使得实现Object类的toString()方法变得更为简单和干净。可以通过添加键值对来构建字符串,并且可以选择省略值为null的键值对。 3. Stopwatch:这是一个在性能测试和度量代码...
9. **类和对象工具**:如Immutable类(不可变对象)、Objects类(对象比较和哈希)等,简化了对类和对象的操作。 10. **事件监听**:Guava的 EventBus 可以帮助实现简单的发布/订阅事件模型,使组件之间的通信更加...
Guava提供的工具类 Apache common-Collection提供的工具类 JDK提供的工具类 Arrays Collections Objects Arrays是操作数组对象的工具类 Collections是操作集合对象的工具类 Objects是操作引用数据类型对象的工具...
在Java编程中,不可变对象(Immutable Objects)是一种一旦创建后就不能被修改的对象。这种特性在多线程环境中尤其重要,因为不可变对象是线程安全的,它们不会因为并发修改而引发数据不一致的问题。Guava库是Google...
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()`。 在实际编程中,确保复杂对象的...
有一些替代方案,例如commons-lang,guava或Object.equals,但是都存在相同的问题: @Overridepublic boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if ...
6. com.google.common.base.Objects 对象工具类,常用的方法有 toStringHelper()、hashCode() 等。 7. com.google.common.collect.FluentIterable 迭代器工具类,常用的方法有 filter()、transform() 等。 8. ...
您可能听说过 ToStringHelper,这是 Google Guava 项目 (MoreObjects#toStringHelper) 中的一个很棒的工具。 这不是那个。 不过,它非常相似。 ReflectiveToStringHelper(或只是 RTSH – arr tush)使用 Java 的...