对象工具 - ObjectUtil

java 开发接触最多的就是 Object 对象了,目前 Object 提供以下方法

1 T defaultIfNullOrEmpty(final T object,final T defaultValue)

如果 object 是null或者empty,返回默认值 defaultValue.

示例:

  1. ObjectUtil.defaultIfNullOrEmpty(null, null) = null
  2. ObjectUtil.defaultIfNullOrEmpty(null, "") = ""
  3. ObjectUtil.defaultIfNullOrEmpty(null, "zz") = "zz"
  4. ObjectUtil.defaultIfNullOrEmpty("abc", *) = "abc"
  5. ObjectUtil.defaultIfNullOrEmpty(Boolean.TRUE, *) = Boolean.TRUE

说明:

  • 使用该方法,可以简化你的代码
  • 如果使用 import static 的特性,代码会更加简洁
  • 如果你只需要判断 null的场景,你可以使用 ObjectUtils.defaultIfNull(Object, Object)对下面的代码重构:
  1. if (isNotNullOrEmpty(defaultReturnResult.getReturnObject())){
  2. return (String) defaultReturnResult.getReturnObject();
  3. }else{
  4. return "redirect:/";
  5. }

可以重构成:

  1. return ObjectUtil.defaultIfNullOrEmpty((String) defaultReturnResult.getReturnObject(), "redirect:/");

再比如:

  1. private void putItemToMap(Map<String, List<Item>> map,String categoryName,Item item){
  2. List<Item> itemList = map.get(categoryName);
  3. if (isNullOrEmpty(itemList)){
  4. itemList = new ArrayList<>();
  5. }
  6. itemList.add(item);
  7. map.put(categoryName, itemList);
  8. }

可以重构成:

  1. private void putItemToMap(Map<String, List<Item>> map,String categoryName,Item item){
  2. List<Item> itemList = ObjectUtil.defaultIfNullOrEmpty(map.get(categoryName), new ArrayList<Item>());
  3. itemList.add(item);
  4. map.put(categoryName, itemList);
  5. }

当然对于上面的case,你还可以直接调用 com.feilong.core.util.MapUtil.putMultiValue(java.util.Map, Object, Object)

2 boolean isArray(Object object)

判断指定的对象 object是否是数组.

说明:

  • 支持判断原始类型数组 primitive 和包装类型数组示例:
  1. int[] i = {};
  2. ObjectUtil.isArray(i); =true
  3. ObjectUtil.isArray(new int[] { 1, 2, 3 }); =true
  4. ObjectUtil.isArray(new Integer[0]); =true
  5. ObjectUtil.isArray(new String[0]); =true

instanceof和 java.lang.Class.isArray()的区别:

通常使用instanceof操作符去判断一个对象 object 是否是数组 array.在JVM层次,instanceof操作符 translates to a specific "instanceof" byte code, which is highly optimized in most JVM implementations.而反射的方法(getClass().isArray()) is compiled to two separate "invokevirtual" instructions.The more generic optimizations applied by the JVM to these may not be as fast as the hand-tuned optimizations inherent in the "instanceof" instruction.

有两种特殊情况: null references 和 primitive arrays.

instanceofgetClass().isArray()
nullfalseNullPointerException
原始类型数组primitive arrayfalsetrue

3 boolean isPrimitiveArray(Object object)

判断指定的对象 object 是否是原生类型数组.

示例:

  1. ObjectUtil.isPrimitiveArray(1) = false
  2. ObjectUtil.isPrimitiveArray(1L) = false
  3. ObjectUtil.isPrimitiveArray("1") = false
  4. ObjectUtil.isPrimitiveArray(new int[] {}) = true
  5. ObjectUtil.isPrimitiveArray(new int[] { 1, 2 }) = true
  6. ObjectUtil.isPrimitiveArray(new byte[] { 1, 2 }) = true
  7. ObjectUtil.isPrimitiveArray(new String[] { "1", "2" }) = false