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