小编Lau*_*bot的帖子

Java Reflection - 如果前面有“get”操作,则“set”上出现 IllegalAccessException

我试图private static final使用反射来更改字段的值(是的,我知道这可能是一个非常糟糕的主意)。\n而且,在大多数情况下,使用以下代码它可以正常工作:

\n\n
import java.lang.reflect.Field;\nimport java.lang.reflect.Modifier;\n\npublic class A {\n\n    public static void main(String[] args) throws ReflectiveOperationException {\n        System.out.println("Before :: " + B.get());\n        Field field = B.class.getDeclaredField("arr");\n        field.setAccessible(true);\n        // System.out.println("Peek   :: " + ((String[]) field.get(null))[0]);\n        Field modifiersField = Field.class.getDeclaredField("modifiers");\n        modifiersField.setAccessible(true);\n        modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);\n        field.set(null, new String[] { "Good bye, World!" });\n        System.out.println("After  :: " + B.get());\n    }\n}\n\nclass B {\n    private static final String[] arr = new String[] { "Hello, World!" };\n\n    public static String get() {\n        return …
Run Code Online (Sandbox Code Playgroud)

java reflection

5
推荐指数
1
解决办法
2921
查看次数

标签 统计

java ×1

reflection ×1