• ObjectUtils 工具类使用

    工具类:org.apache.commons.lang3.ObjectUtils
    版本:commons-lang3:3.7
    地址:ObjectUtils API
    说明:ObjectUtils 是处理对象常用操作的工具类,包含默认值、hash/equals(已废弃)、Object原生toString()、toString(已废弃)、比较、求最常出现值、克隆和内联常量编译优化几部分。

    概览

    概览

    NULL常量

    此常量为ObjectUtils内部类org.apache.commons.lang3.ObjectUtils.Null的一个实例,可以用来做Hashtable的键,用来代替不被接受的null。

    默认值

    defaultIfNull(T, T)

    如果传递的对象为null,则返回默认值。

    表达式
    ObjectUtils.defaultIfNull(null,null) null
    ObjectUtils.defaultIfNull(null,“”) ””
    ObjectUtils.defaultIfNull(null,“zz”) “zz”
    ObjectUtils.defaultIfNull(“abc”,*) “abc”
    ObjectUtils.defaultIfNull(Boolean.TRUE,*) Boolean.TRUE

    firstNonNull(T…)

    返回数组中非空的第一个值。 如果所有值都为null或数组为null或为空,则返回null。

    表达式
    ObjectUtils.firstNonNull(null,null) null
    ObjectUtils.firstNonNull(null,“”) ””
    ObjectUtils.firstNonNull(null,null,“”) ””
    ObjectUtils.firstNonNull(null,“zz”) “zz”
    ObjectUtils.firstNonNull(“abc”,*) “abc”
    ObjectUtils.firstNonNull(null,“xyz”,*) “xyz”
    ObjectUtils.firstNonNull(Boolean.TRUE,*) Boolean.TRUE
    ObjectUtils.firstNonNull() null

    anyNotNull(Object…)

    检查给定数组中的任何值是否为空。如果所有值都为null或数组为null或为空,则返回false。 否则返回true。

    表达式
    ObjectUtils.anyNotNull(*) true
    ObjectUtils.anyNotNull(*,null) true
    ObjectUtils.anyNotNull(null,*) true
    ObjectUtils.anyNotNull(null,null,,) true
    ObjectUtils.anyNotNull(null) false
    ObjectUtils.anyNotNull(null,null) false

    allNotNull(Object…)

    检查数组中的所有值是否都不为空。如果任何值为null或数组为null,则返回false。 如果数组中的所有元素都不为null或数组为空(不包含元素),则返回true。

    表达式
    ObjectUtils.allNotNull(*) true
    ObjectUtils.allNotNull(,) true
    ObjectUtils.allNotNull(null) false
    ObjectUtils.allNotNull(null,null) false
    ObjectUtils.allNotNull(null,*) false
    ObjectUtils.allNotNull(*,null) false
    ObjectUtils.allNotNull(,,null,*) false

    hash/equals

    equals(Object, Object) @Deprecated

    比较两个对象是否相等,其中一个或两个对象可以为null。

    请使用java7中引入的java.util.Objects.equals(Object, Object)

    notEqual(Object, Object) @Deprecated

    比较两个对象是否不相等,其中一个或两个对象可以为null。

    请使用java7中引入的java.util.Objects.equals(Object, Object)然后 取反

    hashCode(Object) @Deprecated

    获取对象的哈希值,null -> 0

    请使用java7中引入的java.util.Objects.hashCode(Object)

    hashCodeMulti(Object…) @Deprecated

    获取多个对象的哈希值。与包含指定对象的ArrayList计算的哈希值相同。

    请使用java7中引入的java.util.Objects.hash(Object...)

    Object原生toString()

    identityToString(Object)

    模拟由Object生成的toString返回值。null将返回null。

    表达式
    ObjectUtils.identityToString(null) null
    ObjectUtils.identityToString(“”) “java.lang.String@1e23”
    ObjectUtils.identityToString(Boolean.TRUE) “java.lang.Boolean@7fa”

    identityToString(Appendable, Object)

    模拟由Object生成的toString返回值并追加到Appendable对象尾部。两个参数都不能为空,否则抛出NPE。

    表达式 等效表达式
    ObjectUtils.identityToString(appendable,“”) appendable.append(“java.lang.String@1e23”)
    ObjectUtils.identityToString(appendable,Boolean.TRUE) appendable.append(“java.lang.Boolean@7fa”)
    ObjectUtils.identityToString(appendable,Boolean.TRUE) appendable.append(“java.lang.Boolean@7fa”)

    identityToString(StrBuilder, Object) @Deprecated

    模拟由Object生成的toString返回值并追加到StrBuilder对象尾部。两个参数都不能为空,否则抛出NPE。

    由于StrBuilder对象已废弃,请使用本类中其他identityToString方法

    identityToString(StringBuffer, Object)

    模拟由Object生成的toString返回值并追加到StringBuffer对象尾部。两个参数都不能为空,否则抛出NPE。

    表达式 等效表达式
    ObjectUtils.identityToString(buf,“”) buf.append(“java.lang.String@1e23”)
    ObjectUtils.identityToString(buf,Boolean.TRUE) buf.append(“java.lang.Boolean@7fa”)
    ObjectUtils.identityToString(buf,Boolean.TRUE) buf.append(“java.lang.Boolean@7fa”)

    identityToString(StringBuilder, Object)

    模拟由Object生成的toString返回值并追加到StringBuilder对象尾部。两个参数都不能为空,否则抛出NPE。

    表达式 等效表达式
    ObjectUtils.identityToString(builder,“”) builder.append(“java.lang.String@1e23”)
    ObjectUtils.identityToString(builder,Boolean.TRUE) builder.append(“java.lang.Boolean@7fa”)
    ObjectUtils.identityToString(builder,Boolean.TRUE) builder.append(“java.lang.Boolean@7fa”)

    ToString

    toString(Object) @Deprecated

    调用对象的toString方法并返回。空对象将返回””

    请使用java7中引入的java.util.Objects.toString(myObject, "")

    toString(Object, String) @Deprecated

    调用第一个参数对象的toString方法并返回。第一个参数对象为空将返回第二个参数对象

    请使用java7中引入的java.util.Objects.toString(Object, String)

    比较

    > min(T…)

    返回给定参数中的最小值,空值安全

    表达式
    ObjectUtils.min(1,2,3,5,5,5,0) 0
    ObjectUtils.min(1,2,3,5,null,5,0) 0
    ObjectUtils.min() null

    > max(T…)

    返回给定参数中的最大值,空值安全

    表达式
    ObjectUtils.min(1,2,3,5,5,5,0) 5
    ObjectUtils.min(1,2,3,5,null,5,0) 5
    ObjectUtils.min() null

    > compare(T, T)

    空值安全的常规比较,设第一个参数为a,第二个参数为b,如果a < b则为负值,如a = b则为零,如果a > b则为正值. 空值判定为比非空值小。

    表达式
    ObjectUtils.compare(1, 2) -1
    ObjectUtils.compare(1, null) 1
    ObjectUtils.compare(null, null) 0

    > compare(T, T, boolean)

    空值安全的常规比较,设第一个参数为a,第二个参数为b,如果a < b则为负值,如a = b则为零,如果a > b则为正值. 如果第三个参数为true,空值判定为比非空值大,否则反之。

    表达式
    ObjectUtils.compare(1, null, true) -1
    ObjectUtils.compare(1, null, false) 1
    ObjectUtils.compare(null, null, false) 0

    > median(T…)

    返回给定对象的中位数,如果给定对象的个数是偶数,则返回更小那个中位数。参数必传且不能有null值。

    表达式
    ObjectUtils.median(1,2,3) 2
    ObjectUtils.median(1,2,3,4) 2

    median(Comparator, T…)

    返回给定对象的中位数,如果给定对象的个数是偶数,则返回更小那个中位数。参数必传且不能有null值。排序过程使用给定比较器。比较器不能为空

    例子:略

    最常出现

    mode(T…)

    返回给定参数中最常出现的值,参数必传。

    表达式
    ObjectUtils.mode(1,2,3,3,3,4,5) 3
    ObjectUtils.mode(1,2,3,null,3,4,5) 3
    ObjectUtils.mode(1,2,null,null,3,null,5) null

    克隆

    clone(T)

    克隆一个对象,如果对象没有实现Cloneable接口,则返回null。

    表达式
    ObjectUtils.clone(new int[] {1,2,3,4,5}) [1,2,3,4,5](新对象)
    ObjectUtils.clone(new BitSet(1)) {}(新对象)
    ObjectUtils.clone(ObjectUtils.NULL) null

    cloneIfPossible(T)

    克隆一个对象,如果对象没有实现Cloneable接口,则返回传入对象自身。

    表达式
    ObjectUtils.cloneIfPossible(new int[] {1,2,3,4,5}) [1,2,3,4,5](新对象)
    ObjectUtils.cloneIfPossible(new BitSet(1)) {}(新对象)
    ObjectUtils.cloneIfPossible(ObjectUtils.NULL) ObjectUtils.NULL(自身)

    Constants

    CONST_XX系列方法

    这一系列以CONST开头的方法,除了做最基本的类型校验没有其他逻辑,直接返回传入值。

    以下摘自源码中的注释说明:

    这些方法确保javac不会内联常量。
    例如,通常开发人员可能会声明一个常量,如:
    public final static int MAGIC_NUMBER = 5;
    如果不同的jar包引用了这个常量,那么当MAGIC_NUMBER更改(例如,MAGIC_NUMBER = 6)后,之前生成的jar包会重新编译。 因为javac通常将字面量或String常量直接内联到字节码中,而不是直接引用MAGIC_NUMBER字段。
    为了减少不必要的重新编译,开发人员可以使用CONST()方法来声明它们的常量:
    public final static int MAGIC_NUMBER = CONST(5);

    可见,总体来说是用来优化编译器行为的。