java反射给实体类赋值

来源:互联网 发布:祝利荣关键k线指标源码 编辑:程序博客网 时间:2024/04/27 22:00

给实体类赋值有两种方法,一个是通过Field.set()方法,另一个是Method.invoke();

至于两种方法的区别,还想请教:

我知道的:set直接给属性赋值,invoke通过调用属性的set方法赋值


好了上代码:

实体类:

package testReflect;public class UserEntity {private int id;private String name;private boolean male;private boolean isMale;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean getMale() {return male;}public void setMale(boolean male) {this.male = male;//this.isMale = male;}public boolean isMale() {return isMale;}}

实现类

package testReflect;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class TestSetAndInvoke {public static UserEntity testSet() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException{UserEntity ue = new UserEntity();//UserEntity.class和ue.getClass()有什么不同?//.class是属性 ue.getClass()需要实例化 是方法Field f1= UserEntity.class.getDeclaredField("id");Field f2= ue.getClass().getDeclaredField("name");//该属性没有set方法Field f3= ue.getClass().getDeclaredField("isMale");//该属性有set方法Field f4= ue.getClass().getDeclaredField("male");//私有属性设置可访问f1.setAccessible(true);f2.setAccessible(true);f3.setAccessible(true);f4.setAccessible(true);//给ue的f1(id属性)设置值为1f1.set(ue, 1);//给ue的f2(name属性)设置值为konf2.set(ue, "kon");//给ue的f3(isMale属性)设置值为truef3.set(ue, true);//给ue的f4(male属性)设置值为truef4.set(ue, true);return ue;}public static UserEntity testInvoke() throws InvocationTargetException, IllegalArgumentException, IllegalAccessException{UserEntity ue = new UserEntity();Method[] allMethods= UserEntity.class.getDeclaredMethods();//获得的allMethods是无顺序的;for (Method method : allMethods) {if(method.getName().startsWith("get")){System.out.println(method.getName());}else{System.out.println(method.getName());if("setId".equals(method.getName())){method.invoke(ue,1);}else if("setName".equals(method.getName())){method.invoke(ue,"kon");}else if("setMale".equals(method.getName())){method.invoke(ue,true);}else{System.out.println("不用设置");}}}return ue;}public static void main(String[] args) throws SecurityException, IllegalArgumentException, NoSuchFieldException, IllegalAccessException, InvocationTargetException {//UserEntity ue = testSet();UserEntity ue = testInvoke();System.out.println(ue.getId()+":"+ue.getName()+" isMale--> "+ue.isMale()+" male: "+ue.getMale());}}

输出结果

1:kon isMale--> true male: true
isMale
不用设置
setId
setMale
getMale
getName
getId
setName
1:kon isMale--> false male: true

0 0