博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用反射变更 private static final field
阅读量:6306 次
发布时间:2019-06-22

本文共 1425 字,大约阅读时间需要 4 分钟。

hot3.png

原文地址:

为了便以理解,此处引用原文:

Assuming no SecurityManager is preventing you from doing this, you can use setAccessible to get around private and resetting the modifier to get rid of final, and actually modify a private static final field.

Here's an example:

import java.lang.reflect.*;public class EverythingIsTrue {   static void setFinalStatic(Field field, Object newValue) throws Exception {      field.setAccessible(true);      Field modifiersField = Field.class.getDeclaredField("modifiers");      modifiersField.setAccessible(true);      modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);      field.set(null, newValue);   }   public static void main(String args[]) throws Exception {            setFinalStatic(Boolean.class.getField("FALSE"), true);      System.out.format("Everything is %s", false); // "Everything is true"   }}

Assuming no SecurityException is thrown, the above code prints "Everything is true".

What's actually done here is as follows:

  • The primitive boolean values true and false in main are autoboxed to reference type Boolean "constants" Boolean.TRUE and Boolean.FALSE
  • Reflection is used to change the  to refer to the Booleanreferred to by Boolean.TRUE
  • As a result, subsequently whenever a false is autoboxed to Boolean.FALSE, it refers to the same Boolean as the one refered to by Boolean.TRUE
  • Everything that was "false" now is "true"

转载于:https://my.oschina.net/ordinance/blog/1845440

你可能感兴趣的文章
java-学习8
查看>>
AOP动态代理
查看>>
Oracle序列
查看>>
xcodebuild命令行编译错误问题解决
查看>>
Yii2.0 下的 load() 方法的使用
查看>>
华为畅玩5 (CUN-AL00) 刷入第三方twrp Recovery 及 root
查看>>
LeetCode----67. Add Binary(java)
查看>>
母版页 MasterPage
查看>>
[转] ReactNative Animated动画详解
查看>>
DNS原理及其解析过程
查看>>
记录自写AFNetWorking封装类
查看>>
没想到cnblog也有月经贴,其实C#值不值钱不重要。
查看>>
【转】LUA内存分析
查看>>
springboot使用schedule定时任务
查看>>
[转] Entity Framework Query Samples for PostgreSQL
查看>>
XDUOJ 1115
查看>>
PHP学习(四)---PHP与数据库MySql
查看>>
模版方法模式--实现的capp流程创建与管理
查看>>
软件需求分析的重要性
查看>>
eclipse的scala环境搭建
查看>>