diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java index 669b2ea54..53957cb50 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/ModifierUtil.java @@ -12,8 +12,8 @@ package org.dromara.hutool.core.reflect; -import org.dromara.hutool.core.exceptions.UtilException; import org.dromara.hutool.core.array.ArrayUtil; +import org.dromara.hutool.core.exceptions.UtilException; import java.lang.reflect.Field; import java.lang.reflect.Member; @@ -272,27 +272,36 @@ public class ModifierUtil { * } * * + *
JDK9+此方法抛出NoSuchFieldException异常,原因是除非开放,否则模块外无法访问属性
+ * * @param field 被修改的field,不可以为空 * @throws UtilException IllegalAccessException等异常包装 * @author dazer * @since 5.8.8 */ public static void removeFinalModify(final Field field) { - if (null == field || !hasModifier(field, ModifierUtil.ModifierType.FINAL)) { + if (!hasModifier(field, ModifierType.FINAL)) { return; } //将字段的访问权限设为true:即去除private修饰符的影响 ReflectUtil.setAccessible(field); + + //去除final修饰符的影响,将字段设为可修改的 + final Field modifiersField; + try{ + modifiersField = Field.class.getDeclaredField("modifiers"); + } catch (final NoSuchFieldException e){ + throw new UtilException(e, "Field [modifiers] not exist!"); + } + try { - //去除final修饰符的影响,将字段设为可修改的 - final Field modifiersField = Field.class.getDeclaredField("modifiers"); //Field 的 modifiers 是私有的 modifiersField.setAccessible(true); //& :位与运算符,按位与; 运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。 //~ :位非运算符,按位取反;运算规则:转成二进制,如果位为0,结果是1,如果位为1,结果是0. modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - } catch (final NoSuchFieldException | IllegalAccessException e) { + } catch (final IllegalAccessException e) { //内部,工具类,基本不抛出异常 throw new UtilException(e, "IllegalAccess for [{}.{}]", field.getDeclaringClass(), field.getName()); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/LookupUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/LookupUtil.java index e60c623ce..1900c3aba 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/LookupUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/reflect/lookup/LookupUtil.java @@ -185,7 +185,7 @@ public class LookupUtil { * @return 构造方法句柄 */ public static MethodHandle findConstructor(final Class> callerClass, final MethodType type) { - final MethodHandles.Lookup lookup = LookupUtil.lookup(callerClass); + final MethodHandles.Lookup lookup = lookup(callerClass); try { return lookup.findConstructor(callerClass, type); } catch (final NoSuchMethodException e) { diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java index a1272241f..29b7a3b9e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/regex/ReUtil.java @@ -17,9 +17,9 @@ import org.dromara.hutool.core.collection.set.SetUtil; import org.dromara.hutool.core.comparator.CompareUtil; import org.dromara.hutool.core.comparator.StrLengthComparator; import org.dromara.hutool.core.convert.Convert; +import org.dromara.hutool.core.func.SerFunction; import org.dromara.hutool.core.lang.Assert; import org.dromara.hutool.core.lang.Validator; -import org.dromara.hutool.core.func.SerFunction; import org.dromara.hutool.core.lang.mutable.Mutable; import org.dromara.hutool.core.lang.mutable.MutableObj; import org.dromara.hutool.core.map.MapUtil; @@ -247,6 +247,8 @@ public class ReUtil { * result : year: 2021, month: 10, day: 11 * * + *jdk9+之后,因为此方法无效
+ * * @param pattern 匹配的正则 * @param content 被匹配的内容 * @return 命名捕获组,key为分组名,value为对应值 @@ -260,7 +262,9 @@ public class ReUtil { final Map