Guava学习笔记(1)Objects,MoreObjects

2018-05-15  本文已影响0人  懵逼猴

从Guava.Objects的提供的一些方法开始学习

Objects主要方法

MoreObjects主要方法

public static <T> T firstNonNull(@Nullable T first, @Nullable T second) {
    return first != null ? first : checkNotNull(second);
  }
toStringHelper(Object self) 
toStringHelper(Class<?> clazz) 
toStringHelper(String className)

ToStringHelper#omitNullValues调用之后,字段中中值为空将不会显示在最后生成String中。
ToStringHelper#add(String name, Object value),name不能为空。这个方法会调用addHolder(name, value)方法,在addHolder使用ValueHolder 来保存键值对,ValueHolder是一个链表,调用toString()方法之后对这个链表进行遍历。有多个add的重载方法。ValueHolder 源码如下:

private static final class ValueHolder {
      String name;
      Object value;
      ValueHolder next;
    }

addaddHolder()生成一个新的节点:

private ValueHolder addHolder() {
      ValueHolder valueHolder = new ValueHolder();
      holderTail = holderTail.next = valueHolder; // 一行语句实现了链表尾节点后移并赋值
      return valueHolder;
    }
for (ValueHolder valueHolder = holderHead.next;
          valueHolder != null;
          valueHolder = valueHolder.next) { //遍历添加的属性值
        Object value = valueHolder.value;
        if (!omitNullValuesSnapshot || value != null) { // 当设置跳过值为null的字段,并且字段为null的时候跳过
          builder.append(nextSeparator);
          nextSeparator = ", ";

          if (valueHolder.name != null) {
            builder.append(valueHolder.name).append('=');
          }
          if (value != null && value.getClass().isArray()) { // 判断是否是数组
            Object[] objectArray = {value};
            String arrayString = Arrays.deepToString(objectArray); //Arrays.deepToString采用递归调用的方式遍历所有的嵌套数组并组成String输出。
            builder.append(arrayString.substring(1, arrayString.length() - 1)); // 去掉Arrays.deepToString返回的[],
          } else {
            builder.append(value);
          }
        }
      }
上一篇 下一篇

猜你喜欢

热点阅读