JAVA反射机制是在运行状态中,关于任意一个类,都可以知道这个类的一切属性和办法;关于任意一个对象,都可以调用它的任意一个办法;这种静态获取的信息以及静态调用对象的办法的功用称为java语言的反射机制。 Java反射机制次要提供了以下功用: 在运行时判别任意一个对象所属的类;在运行时结构任意一个类的对象;在运行时判别任意一个类所具有的成员变量和办法;在运行时调用任意一个对象的办法;生成静态代理。 1. 得到某个对象的属性 1 public Object getProperty(Object owner, String fieldName) throws Exception { 2 Class ownerClass = owner.getClass(); 3 4 Field field = ownerClass.getField(fieldName); 5 6 Object property = field.get(owner); 7 8 return property; 9 } Class ownerClass = owner.getClass():得到该对象的Class。 Field field = ownerClass.getField(fieldName):经过Class得到类声明的属性。 Object property = field.get(owner):经过对象得到该属性的实例,如果这个属性是非私有的,这里会报IllegalAccessException。
2. 得到某个类的静态属性 1 public Object getStaticProperty(String className, String fieldName) 2 throws Exception { 3 Class ownerClass = Class.forName(className); 4 5 Field field = ownerClass.getField(fieldName); 6 7 Object property = field.get(ownerClass); 8 9 return property; 10 } Class ownerClass = Class.
威登保罗男包forName(className) :首先得到这个类的Class。 Field field = ownerClass.getField(fieldName):和上面一样,经过Class得到类声明的属性。 Object property = field.get(ownerClass) :这里和上面有些不同,因为该属性是静态的,所以直接从类的Class里取。
3. 执行某对象的办法 1 public Object invokeMethod(Object owner, String methodName, Object[] args) throws Exception { 2 3 Class ownerClass = owner.getClass(); 4 5 Class[] argsClass = new Class[args.length]; 6 7 for (int i = 0, j = args.length; i j; i++) { 8 argsClass
= args.getClass(); 9 } 10 11 Method method = ownerClass.getMethod(methodName, argsClass); 12 13 return method.invoke(owner, args); 14 } Class owner_class = owner.getClass() :首先还是必需得到这个对象的Class。 5~9行:配置参数的Class数组,作为寻找Method的条件。