guava的MoreObjects提供了Class的toString方法的字符串拼接工具类。
Objects提供了判断相等和获取hashcode的方法。
示例:
package org.example.model;
import com.google.common.base.MoreObjects;
import com.google.common.base.Objects;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.junit.Test;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatNullPointerException;
public class MoreObjectsTest {
@Test
public void test() {
// 1.获取第一个不为空的值,如果都为空,会抛出异常
assertThat(MoreObjects.firstNonNull(null, "abc")).isEqualTo("abc");
assertThatNullPointerException().isThrownBy(() -> MoreObjects.firstNonNull(null, null));
// 2.用于构造类的toString, 参考Person的toString方法
assertThat(new Person("张三", 25)).asString().isEqualTo("Person{name=张三, age=25}");
// 3. guava的Objects提供了equal和hashCode方法, equal方法和JDK equal方法完全相同,
// hashCode可以对多个对象计算哈希值
assertThat(Objects.equal(10, 20)).isFalse();
assertThat(Objects.hashCode("1", "2", "3"))
.isEqualTo(Arrays.hashCode(Arrays.asList("1", "2", "3").toArray()));
}
@AllArgsConstructor
public static class Person {
private String name;
private int age;
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("name", name)
.add("age", age)
.toString();
}
}
}