diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java b/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java index a7dcb5180..3b2daf55e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/bean/PropDesc.java @@ -432,6 +432,7 @@ public class PropDesc { * @param getterMethod 读取方法,可为{@code null} * @return 是否为Transient关键字修饰的 */ + @SuppressWarnings({"rawtypes", "unchecked"}) private static boolean isTransientForGet(final Field field, final Method getterMethod) { boolean isTransient = ModifierUtil.hasAny(field, ModifierType.TRANSIENT); @@ -441,7 +442,13 @@ public class PropDesc { // 检查注解 if (!isTransient) { - isTransient = AnnotationUtil.hasAnnotation(getterMethod, Transient.class); + try { + // issue#IB0JP5,Android可能无这个类 + final Class aClass = Class.forName("java.beans.Transient"); + isTransient = AnnotationUtil.hasAnnotation(getterMethod, aClass); + } catch (final ClassNotFoundException e) { + // ignore + } } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java index 0169298d6..080d3fb9c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ClassUtil.java @@ -710,6 +710,21 @@ public class ClassUtil { return location.getPath(); } + /** + * 判断指定类名的类是否存在 + * + * @param className 全类名 + * @param loader {@link ClassLoader} + * @return 类名的类是否存在 + */ + public static boolean isClassExists(final String className, final ClassLoader loader) { + try { + return null != forName(className, false, loader); + } catch (final Exception e) { + return false; + } + } + /** * 加载指定名称的类,支持: * * - * @param root 根类 - * @param filter 过滤器,被过滤的类及其层级结构中的类与接口将被忽略 - * @param consumer 对遍历到的每个类与接口执行的操作,每个类和接口都只会被访问一次 + * @param root 根类 + * @param filter 过滤器,被过滤的类及其层级结构中的类与接口将被忽略 + * @param consumer 对遍历到的每个类与接口执行的操作,每个类和接口都只会被访问一次 * @param includeRoot 是否包括根类 */ public static void traverseTypeHierarchy(