public class Person
{
String name;
int age;
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
}
现在有一个Person类的对象.person_instance.如果我知道该对象有一个字段age..
那么如何取出person_instance对象中age字段的值呢? 不能用getAge函数.因为对我们而言,getAge函数不知道是不是取的就是age字段。
{
String name;
int age;
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name){
this.name = name;
}
}
现在有一个Person类的对象.person_instance.如果我知道该对象有一个字段age..
那么如何取出person_instance对象中age字段的值呢? 不能用getAge函数.因为对我们而言,getAge函数不知道是不是取的就是age字段。
按照java编码风格,getAge()不读取age变量不合规范
{
//
if(strKey == "Name") return name;
if(strKey == "Age") return age;
return null;
}
與先前兩個動作相比,「變更field 內容」輕鬆多了,因為它不需要參數和引數。
首先呼叫Class 的getField()並指定field 名稱。獲得特定的Field object 之後
便可直接呼叫Field 的get()和set(),如圖9。#001 public class Test {
#002 public double d;
#003
#004 public static void main(String args[])
#005 {
#006 Class c = Class.forName("Test");
#007 Field f = c.getField("d"); //指定field 名稱
#008 Test obj = new Test();
#009 System.out.println("d= " + (Double)f.get(obj));
#010 f.set(obj, 12.34);
#011 System.out.println("d= " + obj.d);
#012 }
#013 }
圖9 / 動態變更field 內容
但是你的需求是想取得Age的值
我们写getAge方法就是取值,这是变成规范。
package test;import java.lang.reflect.Field;public class TestReflect {
public double d;
int aaa; public static void main(String args[]) {
try {
TestReflect test = new TestReflect();
Class c = test.getClass();
Field f = c.getField("d"); TestReflect obj = new TestReflect();
System.out.println("d= " + (Double) f.get(obj));
f.set(obj, 12.34);
System.out.println("d= " + obj.d);
} catch (Exception e) {
e.printStackTrace();
}
}
}
JBoss里边大堆的这种代码。
下边是我的部分代码,这部分代码所在的类有一个功能是将该类的对象序列化成一个Hashtable.
Field[] fields = this.getDeclaredFields();
for ( ...) {
fields[i].setAccessible(true); // 注意,在访问私有变量之前需要设置该属性
if ((fields[i].getModifiers() & Modifier.STATIC) != 0) // 忽略静态变量
continue;
Class fieldCls = fields[i].getType();
String fieldType = fieldCls.toString();
Object fieldObj = fields[i].get(obj); // this is what you want
}