Java反射修改final修饰的属性值 发表于 2021-10-20 | 分类于 Java , final 本文字数: 1.5k | 阅读时长 ≈ 1 分钟 无简介 https://www.jianshu.com/p/2d490b0155ad 12345678910111213141516171819202122232425262728293031323334353637383940package com.tianma.sample;import java.lang.reflect.Field;import java.lang.reflect.Modifier;public class ChangeStaticFinalFieldSample { static void changeStaticFinal(Field field, Object newValue) throws Exception { field.setAccessible(true); // 如果field为private,则需要使用该方法使其可被访问 Field modifersField = Field.class.getDeclaredField("modifiers"); modifersField.setAccessible(true); // 把指定的field中的final修饰符去掉 modifersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); field.set(null, newValue); // 为指定field设置新值 } public static void main(String[] args) throws Exception { Sample.print(); Field canChangeField = Sample.class.getDeclaredField("CAN_CHANGE"); Field cannotChangeField = Sample.class.getDeclaredField("CANNOT_CHANGE"); changeStaticFinal(canChangeField, 2); changeStaticFinal(cannotChangeField, 3); Sample.print(); }}class Sample {private static final int CAN_CHANGE = new Integer(1); // 未内联优化private static final int CANNOT_CHANGE = 1; // 内联优化 public static void print() { System.out.println("CAN_CHANGE = " + CAN_CHANGE); System.out.println("CANNOT_CHANGE = " + CANNOT_CHANGE); System.out.println("------------------------"); }} -------------本文结束 感谢您的阅读------------- 下次一定 打赏 微信支付 本文作者: sumile 本文链接: https://sumile.cn/2021/10/20/Java反射修改final修饰的属性值.html 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!