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指向下一个节点,然后给下一个节点赋值。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值