Java反射(三)Field

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章