Field代表一個類的成員變量
對於public的成員變量,一般用Class對象的getField(String name)可以得到,name參數即方法名,之後我們可以用field.get(Object obj)得到obj身上的這個成員變量的值,用field.set(Object obj,Object value)設置obj身上該成員變量的值爲value.
對於非public的成員變量,我們可以用Class對象的getDeclaredField(String name)得到,不過這種方式得到的Field對象在set或者get時會有異常,因爲我們沒有訪問權限,若想訪問,調用此Field對象的setAccessible(true)即可。
可以用field.getType()獲得這個成員變量對應的數據類型Class
下面展示一個簡單的例子,首先是一個實體類:
public class Circle {
private int x;
private int y;
public float radius;
public Circle(int x, int y, float radius) {
super();
this.x = x;
this.y = y;
this.radius = radius;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
}
然後是讀寫成員變量值的操作代碼:
Circle circle=new Circle(4, 3, 5);
Field radiusField=Circle.class.getField("radius");
float radiusValue=(float) radiusField.get(circle);
System.out.println(radiusValue);
radiusField.set(circle, 10.3f);
System.out.println(radiusField.get(circle));
Field x=Circle.class.getDeclaredField("x");
x.setAccessible(true);
System.out.println(x.get(circle));
x.set(circle, 2);
System.out.println(x.get(circle));
打印結果爲:
5.0
10.3
4
2