diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java index a14147299..10eee71d1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ObjUtil.java @@ -67,6 +67,7 @@ public class ObjUtil { *
  • CharSequence
  • *
  • Map
  • *
  • Iterator
  • + *
  • Iterable
  • *
  • Enumeration
  • *
  • Array
  • * @@ -89,8 +90,8 @@ public class ObjUtil { } int count; - if (obj instanceof Iterator) { - final Iterator iter = (Iterator) obj; + if (obj instanceof Iterator || obj instanceof Iterable) { + final Iterator iter = (obj instanceof Iterator) ? (Iterator) obj : ((Iterable) obj).iterator(); count = 0; while (iter.hasNext()) { count++; @@ -107,7 +108,7 @@ public class ObjUtil { } return count; } - if (obj.getClass().isArray() == true) { + if (obj.getClass().isArray()) { return Array.getLength(obj); } return -1; @@ -121,6 +122,7 @@ public class ObjUtil { *
  • Collection
  • *
  • Map
  • *
  • Iterator
  • + *
  • Iterable
  • *
  • Enumeration
  • *
  • Array
  • * @@ -146,8 +148,8 @@ public class ObjUtil { return ((Map) obj).containsValue(element); } - if (obj instanceof Iterator) { - final Iterator iter = (Iterator) obj; + if (obj instanceof Iterator || obj instanceof Iterable) { + final Iterator iter = obj instanceof Iterator ? (Iterator) obj : ((Iterable) obj).iterator(); while (iter.hasNext()) { final Object o = iter.next(); if (equals(o, element)) { diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java similarity index 78% rename from hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java rename to hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java index 02498f7fe..ee8378516 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ObjectUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ObjUtilTest.java @@ -7,18 +7,40 @@ import cn.hutool.core.date.DateUtil; import org.junit.Assert; import org.junit.Test; +import java.math.BigDecimal; import java.time.Instant; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; -public class ObjectUtilTest { +public class ObjUtilTest { @Test - public void equalsTest(){ - final Object a = null; - final Object b = null; + public void equalsTest() { + Object a = null; + Object b = null; Assert.assertTrue(ObjUtil.equals(a, b)); + + a = new BigDecimal("1.1"); + b = new BigDecimal("1.10"); + Assert.assertTrue(ObjUtil.equals(a, b)); + + a = 127; + b = 127; + Assert.assertTrue(ObjUtil.equals(a, b)); + + a = 128; + b = 128; + Assert.assertTrue(ObjUtil.equals(a, b)); + + a = LocalDateTime.of(2022, 5, 29, 22, 11); + b = LocalDateTime.of(2022, 5, 29, 22, 11); + Assert.assertTrue(ObjUtil.equals(a, b)); + + a = 1; + b = 1.0; + Assert.assertFalse(ObjUtil.equals(a, b)); } @Test @@ -33,6 +55,9 @@ public class ObjectUtilTest { map.put("c", "c1"); length = ObjUtil.length(map); Assert.assertEquals(3, length); + + final Iterable list = ListUtil.of(1, 2, 3); + Assert.assertEquals(3, ObjUtil.length(list)); } @Test