案例:将一个map中的数据转存到一个实体类对象中。
思路分析:
运用反射机制,对象属性在集合里面,将集合里面的内容添加到实体类对象里面。
下面展示一些 内联代码片
。
实体类Dog
public class Dog {
private String name;
private int age;
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public Dog() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
下面展示一些 内联代码片
。
实现步骤如下:
测试类
import org.junit.Test;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Exercise1 {
@Test//案例一:将一个map中的数据转存到一个实体类对象中。
public void test5() throws Exception {
//定义一个HashMap集合存放 Dog类属性和对象
HashMap<String, Object> map = new HashMap<>();
map.put("name","旺财");
map.put("age",3);
//获取一个实例对象
Dog dog = getObject(map,Dog.class);
System.out.println(dog);
}
//将集合转化为对象的具体实现
public <T>T getObject(Map<String,Object> map, Class<T> c) throws Exception {
T t = c.newInstance();//创建一个一个类型为T对象t
//1.拆开map
Set<Map.Entry<String, Object>> entries = map.entrySet();
for (Map.Entry<String, Object> entry : entries) {//获取集合里面的元素
String key = entry.getKey();//得到key的值(类T的的成员属性)
//2.将map中的值存入T这个类的对象属性中
Field f = c.getDeclaredField(key);//获取类的所有字段
f.setAccessible(true);//简单的理解:设置访问权限
f.set(t,entry.getValue());//给T对象赋值
}
return t;
}
}