`

guava Objects的常用用法以及实现

阅读更多
Objects主要用来重写toString和HashCode方法。里面还有一个方法firstNonNull(T, T)返回两个值中不为null的一个如果都位null.抛出空指针异常。

上代码看用法:

import com.google.common.base.Objects;

public class ObjectsLearn {
	private Integer id;
	private String name;
	private String address;
	
	public ObjectsLearn(Integer id, String name, String address) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
	}
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	@Override
	public String toString() {
		//return "ObjectsLearn [id=" + id + ", name=" + name + ", address=" + address + "]";
		return Objects.toStringHelper(this).omitNullValues().add("id", id).add("name", name).add("address", address).toString();
	}
	
	@Override
	public int hashCode() {
		return Objects.hashCode(id,name,address);
	}
	public static void main(String[] args) {
		ObjectsLearn learn = new ObjectsLearn(1, "test", "天上");
		System.out.println(learn);
	}
}


看了一下 Objects.toStringHelper(this).omitNullValues().add("id", id).add("name", name).add("address", address).toString()这一段代码的源码记录一下:
Objects这一段代码采用链表的结构实现:
 public static final class ToStringHelper {
    private final String className;
    private final ValueHolder holderHead = new ValueHolder();
    private ValueHolder holderTail = holderHead;
    private boolean omitNullValues = false;

定义了一个链表的头holderHead;

private ValueHolder addHolder() {
      ValueHolder valueHolder = new ValueHolder();
      holderTail = holderTail.next = valueHolder;
      return valueHolder;
    }
这一段代码指向下一个节点;

private ToStringHelper addHolder(String name, @Nullable Object value) {
      ValueHolder valueHolder = addHolder();
      valueHolder.value = value;
      valueHolder.name = checkNotNull(name);
      return this;
    }
这一段代码首先调用addHolder指向下一个节点,然后给下一个节点赋值。
分享到:
评论

相关推荐

    Google-guava 19.0

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

    java常用工具类整理

    4. org.springframework.util.xml.Assert 断言工具类,在我们的参数判断时应该经常使用,常用的方法有 assertNotNull()、assertEquals() 等。 5. org.springframework.util.xml.ClassUtils 用于 Class 的处理工具类...

    28个java常用的工具类源码

    16. **Guava库的工具类**: 如Preconditions、Strings、Objects等,提供了更多的实用功能。 17. **Apache Commons Lang**: 提供了一系列高级语言功能,如字符串操作、类型转换、日期时间处理等。 18. **Apache ...

    java开发中常用的通用工具类.rar

    - `Objects`:提供`equals()`和`hashCode()`的实用方法,以及`requireNonNull()`进行非空检查。 4. **Joda-Time**: Joda-Time是一个替代Java内置日期和时间API的库,提供了更强大和灵活的日期时间处理。 - `...

    常用工具类

    可以使用`String.isEmpty()`方法检查字符串长度是否为0,或者使用`Objects.nonNull()`和`String.equals()`组合来确认字符串是否为null或空字符串。此外,还可以使用Apache Commons Lang库中的`StringUtils.isEmpty()...

    28个java常用的工具类

    20. **Objects**:提供了一些有用的静态方法,如equals()、hashCode()和requireNonNull()。 21. **Currency**:获取和操作货币类型。 22. **Charset**:处理字符编码。 23. **File**:处理文件和目录。 24. **...

    spring-boot-mybatis-cache-thymeleaf学习练习demo源码

    MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口和Java的POJOs(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。 **Spring Cache** Spring Cache是Spring框架的一个模块,提供了一种抽象...

    JAVA对象以及数据的工具类

    此外,Objects类(在Java 7引入)提供了equals、hashCode和requireNonNull等方法,增强了对象比较和非空检查的功能。 数据处理工具类往往涉及集合操作。Java的util包包含了多种集合框架类,如List、Set、Map等。...

    如何去掉list集合中重复的元素?.docx

    二、集合去重的常用方法 1. 使用Set Set接口下的集合类如HashSet不存储重复元素,可以方便地去除列表中的重复项。将List转换为Set,然后再转换回List即可: ```java List<PenBean> uniquePenBeanList = new ...

    java List去掉重复元素的几种方式(小结)

    _java List去掉重复元素的几种方式_ _java List_是一种常用的数据集合,在实际应用中,我们经常需要去掉_List_中的重复元素以提高数据的准确性和...这些方法可以根据实际情况选择使用,以提高数据的准确性和可读性。

    java utils 工具类

    这篇博文链接(已提供但无法直接访问)可能详细探讨了JavaUtils工具类的设计原则、常用方法以及如何在实际项目中应用。尽管无法直接查看该博文,我们可以从一般的角度来探讨JavaUtils工具类的知识点。 1. **工具类...

    UsefulStuff:一些便于访问的有用方法

    - `Objects` 类:用于比较、校验对象是否为null,以及创建不可变对象等。 2. **Java.util包中的工具类**: - `Collections` 类:提供了对集合框架的操作,如排序、反转、查找等。 - `Date` 和 `Calendar` 类:...

    浅谈Java中hashCode的正确求值方法

    在实践中,可以使用Arrays.hashCode方法来计算数组的散列码,也可以使用 Guava 库中的Objects.hashCode方法来计算对象的散列码。 此外,为了提高散列表的性能,可以将对象的散列码缓存起来,如果散列码不匹配,就...

Global site tag (gtag.js) - Google Analytics