java反射机制中的getDeclaredField()
程序员文章站
2022-05-28 17:31:52
...
反射机制:所谓的反射机制就是java语言在运行时拥有一项自观的能力。通过这种能力可以彻底的了解自身的情况为下一步的动作做准备。
如下为getDeclaredField()的一个实例:
package com.bijian.test; import java.lang.reflect.Field; import java.util.Date; public class Program { public Program() { } public Program(String str, Date date, int i) { this.str = str; this.date = date; this.i = i; } private String str = "Hello"; private Date date = new Date(); protected int i = 0; public int getI() { return i; } public String getStr() { return str; } public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException { try { Program program = new Program(); Class progClass = program.getClass(); //在对象是未知的情况下,通过如下方法得到这个对象的所有属性值 java.lang.reflect.Field[] fields = progClass.getDeclaredFields(); for (java.lang.reflect.Field f : fields) { System.out.println(f.getName()); } // 通过反射机制,获取到类Program中的str Field strField1 = progClass.getDeclaredField("str"); // 输出private java.lang.String Program.str System.out.println("Field found: " + strField1.toString()); // 同上 Field dateField = progClass.getDeclaredField("date"); System.out.println("Field found: " + dateField.toString()); // 同上 Field iField = progClass.getDeclaredField("i"); System.out.println("Field found: " + iField.toString()); // 我想说的是这一点,这里能获取到类Program中的str并对其修改。 // Program类中没有对str设置的setStr()方法,而且使用了private, // 这是不允许访问的。 // 但是我们能通过反射机制,从而获取private类型的值,并直接改。 Field strField = progClass.getDeclaredField("str"); strField.set(program, "我是Str字符串。"); // 输出:我是Str字符串。 System.out.println(program.getStr()); } catch (NoSuchFieldException ex) { System.out.println(ex.toString()); } } }
运行结果:
str date i Field found: private java.lang.String com.bijian.test.Program.str Field found: private java.util.Date com.bijian.test.Program.date Field found: protected int com.bijian.test.Program.i 我是Str字符串。
上一篇: JavaScript如何动态改变图片显示大小的示例代码
下一篇: linux下samba配置