怎么把一个javabean里面的属性封装成map集合

 我来答
哈尔滨市南岗区爱尚职
2017-05-23 · 做品质教育,用事实说话
哈尔滨市南岗区爱尚职
爱尚实训成立于2010年,总部设立在软件外包名城—大连,并在哈尔滨和沈阳设有分校。爱尚实训专注于IT行业精英的培养,打造高端IT技能实训品牌。
向TA提问
展开全部

答:基本思想,利用java中的反射机制

1.首先先自定义一个javabean,比如User

package aishang.reflect;

public class User {
private int age;
private String name;

public User() {
super();
}

public User(String name) {
super();
this.name = name;
}

public User(int age, String name) {
super();
this.age = age;
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

@Override
public String toString() {
return "User [age=" + age + ", name=" + name + "]";
}
}

2.利用反射机制,读取javabean中的全部属性

Class<?> clazz = Class.forName("aishang.reflect.User");
Map<String,Object> myMap = new HashMap<String,Object>();
// 取得本类的全部属性
Field[] field = clazz.getDeclaredFields();
for (int i = 0; i < field.length; i++) {
  // 权限修饰符
  //int mo = field[i].getModifiers();
  //String priv = Modifier.toString(mo);
  // 属性类型
  //Class<?> type = field[i].getType();
  //System.out.println(priv + " " + type.getName() + " " + field[i].getName() + ";");
  //-------------------------------------------------------------
  //获取属性名:field[i].getName()
  //将属性名封装到map中
  myMap.put(field[i].getName(),null);
}        

3.上述Map结构和User类的对应已经建立好,Map的Key就是User的属性名,但是Map中的Value还是空的,如果有需要可以将User对象的实例的值,映射到Map的Value中去,实例代码如下:

  User user = new User();
  user.setName("姜磊");
  user.setAge(23);
        
  for (Map.Entry<String, Object> m : myMap.entrySet()) {
      String name = m.getKey();
      //Object value = m.getValue();

      //创建一属性描述器,将属性描述器映射到User类中
      PropertyDescriptor pd = new PropertyDescriptor(name, User.class);
      //得到getter属性
      Method getter = pd.getReadMethod();

      //将方法反射到User类中,读出属性的值
       Object o = getter.invoke(user,null);
      //System.out.println(o);
     //给map重新赋值
     myMap.put(name, o);
}
        
    System.out.println(myMap.get("age"));
    System.out.println(myMap.get("name"));
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式