setFieldModify增加非空校验,增加位与、位非 运算符说明

This commit is contained in:
duandazhi 2022-09-21 14:29:14 +08:00
parent bcfbd28c12
commit c9fe271244

View File

@ -1112,7 +1112,6 @@ public class ReflectUtil {
return accessibleObject; return accessibleObject;
} }
/** /**
* 设置final的field字段可以被修改 * 设置final的field字段可以被修改
* @param field 被修改的field不可以为空 * @param field 被修改的field不可以为空
@ -1121,20 +1120,24 @@ public class ReflectUtil {
* @author dazer * @author dazer
*/ */
public static void setFieldModify(Field field) { public static void setFieldModify(Field field) {
if (ModifierUtil.hasModifier(field, ModifierUtil.ModifierType.FINAL)) { if (field != null) {
//将字段的访问权限设为true即去除private修饰符的影响 if (ModifierUtil.hasModifier(field, ModifierUtil.ModifierType.FINAL)) {
if (!field.isAccessible()) { //将字段的访问权限设为true即去除private修饰符的影响
field.setAccessible(true); if (!field.isAccessible()) {
} field.setAccessible(true);
try { }
//去除final修饰符的影响将字段设为可修改的 try {
Field modifiersField = Field.class.getDeclaredField("modifiers"); //去除final修饰符的影响将字段设为可修改的
//Field modifiers 是私有的 Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true); //Field modifiers 是私有的
modifiersField.setInt(field, field.getModifiers() &~ Modifier.FINAL); modifiersField.setAccessible(true);
} catch (NoSuchFieldException | IllegalAccessException e) { //& 位与运算符按位与 运算规则两个数都转为二进制然后从高位开始比较如果两个数都为1则为1否则为0
//内部工具类基本不抛出异常 //~ 位非运算符按位取反运算规则转成二进制如果位为0结果是1如果位为1结果是0.
throw new UtilException(e, "IllegalAccess for {}.{}", field.getDeclaringClass(), field.getName()); modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
} catch (NoSuchFieldException | IllegalAccessException e) {
//内部工具类基本不抛出异常
throw new UtilException(e, "IllegalAccess for {}.{}", field.getDeclaringClass(), field.getName());
}
} }
} }
} }