我们新建一个类Person:
package person;
import sex.Sex;
public class Person{
private String name = null;
private int age = 0;
private Sex sex = null;
private String birthday = null;
public Person(){};
public Person(String name, int age, Sex sex, String birthday){
String birMatch = "\\d{4}-\\d{2}-\\d{2}";
this.name = name;
this.age = age;
this.sex = sex;
if(birthday.matches(birMatch)){
this.birthday = birthday;
}
}
public void setInfo(String name, int age, Sex sex, String birthday){
String birMatch = "\\d{4}-\\d{2}-\\d{2}";
this.name = name;
this.age = age;
this.sex = sex;
if(birthday.matches(birMatch)){
this.birthday = birthday;
}
}
public void setName(String name){
this.name = name;
}
public void setAge(int age){
this.age = age;
}
public void setSex(Sex sex){
this.sex = sex;
}
public void setBirthday(String birthday){
this.birthday = birthday;
}
public String getName(){
return this.name;
}
public int getAge(){
return this.age;
}
public Sex getSex(){
return this.sex;
}
public String getBirthday(){
return this.birthday;
}
public String toString(){
return this.name + ", " + this.age + " years old, " + this.sex + ", " + this.birthday;
}
}
新建一个枚举Sex:
package sex;
public enum Sex{
MALE, FEMALE;
}
在Main.java主方法中获取Person类的属性:
package main;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import person.Person;
import sex.Sex;
public class Main {
public static void main(String[] args){
Class<?> cls = null;
Object obj = null;
try {
cls = Class.forName("person.Person");
obj = cls.newInstance();
Field var1 = cls.getDeclaredField("name");
var1.setAccessible(true); //设置该属性能被外部访问
var1.set(obj, "XiaoBiqiang");
System.out.println(var1.get(obj));
var1.setAccessible(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
XiaoBiqiang
注意:使用反射操作属性时最好通过setter和getter方法,因为扩大了属性的访问权限可能造成不安全
浙公网安备 33010602011771号