修改对象的私有静态成员变量属性值


    private void modifySrvmgrCallerKeyLocked() {
        try {
            //更改私有变量值
            SrvmgrCaller pt = new SrvmgrCaller();
            Class<?> srvmgrCallerClazz = SrvmgrCaller.class;
            // 获得指定类的属性
            Field field = srvmgrCallerClazz.getDeclaredField("initKeyLocked");
            // 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
            field.setAccessible(true);
            Field modifiersField = Field.class.getDeclaredField("modifiers");
            modifiersField.setAccessible(true);
            modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
            // 更改私有静态属性的值  设置为false 防止SrvmgrCaller.initCallerKeyByValue下在if (!initKeyLocked.getAndSet(true))代码段判断过不去
            field.set(pt, new AtomicBoolean(false));
        } catch (Exception e) {
            log.error("modifySrvmgrCallerKeyLocked happens exception,excetpionMsg:{}", e.getMessage());
        }
    }

猜你喜欢

转载自blog.csdn.net/CoderTnT/article/details/118095113