diff --git a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java index bae54c757..5c7de2ac7 100644 --- a/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/reflect/ClassUtil.java @@ -314,8 +314,8 @@ public class ClassUtil { * @since 3.2.1 */ public static String getClassPath(final boolean isEncoded) { - final URL classPathURL = ResourceUtil.getResourceUrl(StrUtil.EMPTY); - final String url = isEncoded ? classPathURL.getPath() : URLUtil.getDecodedPath(classPathURL); + final URL classPathUrl = ResourceUtil.getResourceUrl(StrUtil.EMPTY); + final String url = isEncoded ? classPathUrl.getPath() : URLUtil.getDecodedPath(classPathUrl); return FileUtil.normalize(url); } @@ -379,11 +379,11 @@ public class ClassUtil { } /** - * 是否简单值类型或简单值类型的数组
- * 包括:原始类型,、String、other CharSequence, a Number, a Date, a URI, a URL, a Locale or a Class及其数组 + * 是否为 简单值类型 或 简单值类型的数组
* * @param clazz 属性类 - * @return 是否简单值类型或简单值类型的数组 + * @return 是否为 简单值类型 或 简单值类型的数组 + * @see #isSimpleValueType(Class) */ public static boolean isSimpleTypeOrArray(final Class clazz) { if (null == clazz) { @@ -397,6 +397,7 @@ public class ClassUtil { * 包括: *
 	 *     原始类型
+	 *     枚举
 	 *     String、other CharSequence
 	 *     Number
 	 *     Date
@@ -404,23 +405,24 @@ public class ClassUtil {
 	 *     URL
 	 *     Locale
 	 *     Class
+	 *     jdk8时间相关类型
 	 * 
* * @param clazz 类 * @return 是否为简单值类型 */ public static boolean isSimpleValueType(final Class clazz) { - return isBasicType(clazz) // - || clazz.isEnum() // - || CharSequence.class.isAssignableFrom(clazz) // - || Number.class.isAssignableFrom(clazz) // - || Date.class.isAssignableFrom(clazz) // - || clazz.equals(URI.class) // - || clazz.equals(URL.class) // - || clazz.equals(Locale.class) // - || clazz.equals(Class.class)// + return isBasicType(clazz) + || clazz.isEnum() + || CharSequence.class.isAssignableFrom(clazz) + || Number.class.isAssignableFrom(clazz) + || Date.class.isAssignableFrom(clazz) + || clazz.equals(URI.class) + || clazz.equals(URL.class) + || clazz.equals(Locale.class) + || clazz.equals(Class.class) // jdk8 date object - || TemporalAccessor.class.isAssignableFrom(clazz); // + || TemporalAccessor.class.isAssignableFrom(clazz); } /** @@ -472,14 +474,14 @@ public class ClassUtil { * @return 是否为标准类 */ public static boolean isNormalClass(final Class clazz) { - return null != clazz // - && false == clazz.isInterface() // - && false == ModifierUtil.isAbstract(clazz) // - && false == clazz.isEnum() // - && false == clazz.isArray() // - && false == clazz.isAnnotation() // - && false == clazz.isSynthetic() // - && false == clazz.isPrimitive();// + return null != clazz + && false == clazz.isInterface() + && false == ModifierUtil.isAbstract(clazz) + && false == clazz.isEnum() + && false == clazz.isArray() + && false == clazz.isAnnotation() + && false == clazz.isSynthetic() + && false == clazz.isPrimitive(); } /** @@ -635,8 +637,8 @@ public class ClassUtil { return false; } final String objectPackageName = objectPackage.getName(); - return objectPackageName.startsWith("java.") // - || objectPackageName.startsWith("javax.") // + return objectPackageName.startsWith("java.") + || objectPackageName.startsWith("javax.") || clazz.getClassLoader() == null; } 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 b2f0ee03a..9cf4ed471 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 @@ -88,10 +88,9 @@ public class ObjUtil { return ((Map) obj).size(); } - int count; + int count = 0; if (obj instanceof Iterator || obj instanceof Iterable) { final Iterator iter = (obj instanceof Iterator) ? (Iterator) obj : ((Iterable) obj).iterator(); - count = 0; while (iter.hasNext()) { count++; iter.next(); @@ -103,7 +102,6 @@ public class ObjUtil { } if (obj instanceof Enumeration) { final Enumeration enumeration = (Enumeration) obj; - count = 0; while (enumeration.hasMoreElements()) { count++; enumeration.nextElement(); @@ -194,7 +192,7 @@ public class ObjUtil { * 检查对象是否不为{@code null} * * @param obj 对象 - * @return 是否为null + * @return 是否不为null */ public static boolean isNotNull(final Object obj) { return null != obj; @@ -249,7 +247,7 @@ public class ObjUtil { * 判断指定对象是否为非空 * * @param obj 被判断的对象 - * @return 是否为空,如果类型不支持,返回true + * @return 是否不为空,如果类型不支持,返回true * @since 4.5.7 * @see #isEmpty(Object) */ @@ -270,7 +268,7 @@ public class ObjUtil { * @param 对象类型 * @param object 被检查对象,可能为{@code null} * @param defaultValue 被检查对象为{@code null}返回的默认值,可以为{@code null} - * @return 被检查对象为{@code null}返回默认值,否则返回原值 + * @return 被检查对象不为 {@code null} 返回原值,否则返回默认值 * @since 3.0.7 */ public static T defaultIfNull(final T object, final T defaultValue) { @@ -278,12 +276,12 @@ public class ObjUtil { } /** - * 如果给定对象为{@code null} 返回默认值, 如果不为null 返回自定义handle处理后的返回值 + * 如果给定对象不为{@code null} 返回原值, 否则返回 {@link Supplier#get()} 提供的默认值 * - * @param 被检查对象类型 - * @param source Object 类型对象 - * @param defaultSupplier 默认为空的处理逻辑 - * @return 处理后的返回值 + * @param 被检查对象类型 + * @param source 被检查对象,可能为{@code null} + * @param defaultSupplier 为空时的默认值提供者 + * @return 被检查对象不为 {@code null} 返回原值,否则返回 {@link Supplier#get()} 提供的默认值 * @since 5.4.6 */ public static T defaultIfNull(final T source, final Supplier defaultSupplier) { @@ -294,14 +292,14 @@ public class ObjUtil { } /** - * 如果给定对象为{@code null} 返回默认值, 如果不为null 返回自定义handle处理后的返回值 + * 如果给定对象不为{@code null} 返回自定义handler处理后的结果,否则返回 {@link Supplier#get()} 提供的默认值 * - * @param 返回值类型 - * @param 被检查对象类型 - * @param source Object 类型对象 - * @param handler 非空时自定义的处理方法 - * @param defaultSupplier 默认为空的处理逻辑 - * @return 处理后的返回值 + * @param 返回值类型 + * @param 被检查对象类型 + * @param source 被检查对象,可能为{@code null} + * @param handler 非空时自定义的处理方法 + * @param defaultSupplier 为空时的默认值提供者 + * @return 被检查对象不为 {@code null} 返回处理后的结果,否则返回 {@link Supplier#get()} 提供的默认值 * @since 6.0.0 */ public static R defaultIfNull(final T source, final Function handler, final Supplier defaultSupplier) { @@ -312,14 +310,14 @@ public class ObjUtil { } /** - * 如果给定对象为{@code null}返回默认值, 如果不为null返回自定义handle处理后的返回值 + * 如果给定对象不为{@code null} 返回自定义handler处理后的结果,否则返回默认值 * * @param 返回值类型 * @param 被检查对象类型 - * @param source Object 类型对象 + * @param source 被检查对象,可能为{@code null} * @param handler 非空时自定义的处理方法 - * @param defaultValue 默认为空的返回值 - * @return 处理后的返回值 + * @param defaultValue 为空时的默认返回值 + * @return 被检查对象不为 {@code null} 返回处理后的结果,否则返回默认值 * @since 6.0.0 */ public static R defaultIfNull( @@ -331,7 +329,7 @@ public class ObjUtil { *

克隆对象 *

    *
  1. 如果对象是数组,则等同于{@link ArrayUtil#clone(Object)};
  2. - *
  3. 如果对象实现了{@link Cloneable}接口,调用其{@code Cloneable#clone()}方法;
  4. + *
  5. 如果对象实现了{@link Cloneable}接口,调用 {@link Object#clone()}方法;
  6. *
  7. 如果对象实现了{@link Serializable}接口,执行深度克隆;
  8. *
  9. 不符合上述任意情况则返回{@code null};
  10. *
@@ -360,7 +358,7 @@ public class ObjUtil { * * @param 对象类型 * @param obj 对象 - * @return 克隆后或原对象 + * @return 克隆对象或原对象 * @see #clone(Object) */ public static T cloneIfPossible(final T obj) { @@ -375,7 +373,7 @@ public class ObjUtil { /** * 序列化后拷贝流的方式克隆
- * 若对象未实现{@link Serializable}接口则默认返回{@code null} + * 若对象未实现{@link Serializable}接口,则返回{@code null} * * @param 对象类型 * @param obj 被克隆对象 @@ -388,7 +386,7 @@ public class ObjUtil { } /** - * 是否为基本类型,包括包装类型和非包装类型 + * 是否为基本类型,包括包装类型和原始类型 * * @param object 被检查对象,{@code null}返回{@code false} * @return 是否为基本类型 @@ -402,14 +400,15 @@ public class ObjUtil { } /** - * 检查是否为有效的数字,若对象不为{@link Number},则直接返回{@code true},否则: + * 是否为有效的数字,主要用于检查浮点数是否为有意义的数值
+ * 若对象不为{@link Number}类型,则直接返回{@code true},否则: *
    *
  • 若对象类型为{@link Double},则检查{@link Double#isInfinite()}或{@link Double#isNaN()};
  • *
  • 若对象类型为{@link Float},则检查{@link Float#isInfinite()}或{@link Float#isNaN()};
  • *
* - * @param obj 被检查类型 - * @return 检查结果,非数字类型和Null将返回true + * @param obj 被检查对象 + * @return 检查结果,非数字类型和{@code null}将返回{@code true} * @see NumberUtil#isValidNumber(Number) */ public static boolean isValidIfNumber(final Object obj) { @@ -420,13 +419,13 @@ public class ObjUtil { } /** - * {@code null}安全的对象比较,{@code null}对象排在末尾 + * {@code null}安全的对象比较,{@code null}对象小于其他对象 * * @param 被比较对象类型 * @param c1 对象1,可以为{@code null} * @param c2 对象2,可以为{@code null} - * @return 比较结果,如果c1 < c2,返回数小于0,c1==c2返回0,c1 > c2 大于0 - * @see java.util.Comparator#compare(Object, Object) + * @return 比较结果,如果{@code c1 < c2},则返回值小于0,{@code c1 == c2} 返回0,{@code c1 > c2} 则返回值大于0 + * @see CompareUtil#compare(Comparable, Comparable) * @since 3.0.7 */ public static > int compare(final T c1, final T c2) { @@ -439,9 +438,9 @@ public class ObjUtil { * @param 被比较对象类型 * @param c1 对象1,可以为{@code null} * @param c2 对象2,可以为{@code null} - * @param nullGreater 当被比较对象为null时是否排在前面 - * @return 比较结果,如果c1 < c2,返回数小于0,c1==c2返回0,c1 > c2 大于0 - * @see java.util.Comparator#compare(Object, Object) + * @param nullGreater {@code null}对象是否大于其他对象 + * @return 比较结果,如果{@code c1 < c2},则返回值小于0,{@code c1 == c2} 返回0,{@code c1 > c2} 则返回值大于0 + * @see CompareUtil#compare(Comparable, Comparable, boolean) * @since 3.0.7 */ public static > int compare(final T c1, final T c2, final boolean nullGreater) { @@ -451,7 +450,7 @@ public class ObjUtil { /** * 获得给定类的第一个泛型参数 * - * @param obj 被检查的对象 + * @param obj 被检查的实体对象 * @return {@link Class} * @since 3.0.8 */ @@ -462,10 +461,11 @@ public class ObjUtil { /** * 获得给定类指定下标的泛型参数 * - * @param obj 被检查的对象 + * @param obj 被检查的实体对象 * @param index 泛型类型的索引号,即第几个泛型类型 * @return {@link Class} * @since 3.0.8 + * @see ClassUtil#getTypeArgument(Class, int) */ public static Class getTypeArgument(final Object obj, final int index) { return ClassUtil.getTypeArgument(obj.getClass(), index); @@ -475,7 +475,7 @@ public class ObjUtil { *

将对象转为字符串 *

    *
  • 若对象为{@code null},则返回“null”;
  • - *
  • 若对象为{@link Map},则返回{@code Map#toString()};
  • + *
  • 若对象为{@link Map},则返回{@code Map.toString()};
  • *
  • 若对象为其他类型,则调用{@link Convert#toStr(Object)}进行转换;
  • *
*