zoukankan      html  css  js  c++  java
  • 【guava】对象处理

    一,equals方法     

          我们在开发中经常会需要比较两个对象是否相等,这时候我们需要考虑比较的两个对象是否为null,然后再调用equals方法来比较是否相等,google guava库的com.google.common.base.Objects类提供了一个静态方法equals可以避免我们自己做是否为空的判断,示例如下:

        Object a = null;
        Object b = new Object();
        boolean aEqualsB = Objects.equal(a, b);

    源码如下:

        public static boolean equal(@Nullable Object a, @Nullable Object b) {
            return a == b || (a != null && a.equals(b));
        }

        首先判断a b是否是同一个对象,如果是同一对象,那么直接返回相等,如果不是同一对象再判断a不为null并且a.equals(b). 这样做既考虑了性能也考虑了null空指针的问题。

    二,toString方法

     public static class Student {
           public String toString() {
                return Objects.toStringHelper(this.getClass())
                        .add("id", id)
                        .add("name", name)
                        .add("age", age)
                        .omitNullValues().toString();
            }

    我们定义了一个Student类,该类有三个属性,分别为id,name,age,我们重写了toString()方法,在这个方法中我们使用了Objects.toStringHelper方法,首先指定toString的类,然后依次add属性名称和属性值,可以使用omitNullValues()方法来指定忽略空值,最后调用其toString()方法,就可以得到一个格式很好的toString实现了。

    上面代码输出的结果是:

    Student{id=1, name=Jim, age=13}

    这种方式写起来很简单,可读性也很好,所以用Guava吧。

    三,hashcode方法

      通常hashcode实现方法如下:

      

    public int hashCode() {
            int result = age;
            result = 31 * result + (name != null ? name.hashCode() : 0);
            result = 31 * result + (birthday != null ? birthday.hashCode() : 0);
            return result;
        }

     如果使用guava,这样实现:

    @Override
        public int hashCode() {
            return Objects.hashCode(age, name, birthday);
        }
    Objects.hashCode 源码如下:
    public static int hashCode(Object a[]) {
            if (a == null) return 0;
            int result = 1;
            for (Object element : a) //循环参数,计算hash
                result = 31 * result + (element == null ? 0 : element.hashCode()); 
            return result;
        }
     
  • 相关阅读:
    第4課 部屋に机といずがあらます。
    (转)三层结构设计与ERP部署规划
    多线程的一个问题(同步事件和等待句柄)转
    C#操作xml小结(转)
    再论Assembly Registration Tool (Regasm.exe)
    再论Type Library Importer (Tlbimp.exe)
    Blittable and NonBlittable Types
    再论Importing a Type Library as an Assembly
    .Net Remoting(基本操作) Part.2 (转)
    Monitor类示例(转)
  • 原文地址:https://www.cnblogs.com/lodor/p/7485398.html
Copyright © 2011-2022 走看看