在jdk17+已经不能直接通过 setAccessible
来访问私有属性了
Field name = access.getClass().getDeclaredField("name");
name.setAccessible(true);
name.set(access,"6666");// AccessTest{name='6666'}
System.out.println(access);
以上代码在jdk17+会抛出异常,可能在jdk 12+也会抛出异常,jdk高版本更新了安全域机制。
Unable to make field private static XXXXXXXXXXXXXXXXXX VVVVVVVVVVVVVVVVVVVVVVVVVV accessible: module javafx.graphics does not "opens XXXXXXXXXXXXXXXXXX" to unnamed module @64a294a6
虽然高版本不能直接反射访问私有变量、方法。我们可以通过添加jvm运行参数来允许
--add-opens java.base/java.lang=ALL-UNNAMED
--add-exports
javafx.graphics/com.sun.javafx.geom=ALL-UNNAMED
--add-exports
javafx.graphics/com.sun.javafx.text=ALL-UNNAMED
--add-exports
javafx.graphics/com.sun.javafx.scene.text=ALL-UNNAMED
--add-opens
javafx.graphics/javafx.scene.text=ALL-UNNAMED
--add-opens
javafx.graphics/com.sun.javafx.text=ALL-UNNAMED
--add-opens
javafx.graphics/com.sun.javafx.application=ALL-UNNAMED
--add-opens
java.base/java.lang.reflect=ALL-UNNAMED
标签:姿势,jdk,私有,javafx,--,add,graphics,UNNAMED,opens
From: https://www.cnblogs.com/lingkang/p/16711641.html