Java基础将Bean属性值放入Map中的实例

Java基础将Bean属性值放入Map中的实例

利用发射将Java对象的属性值以属性名称为键,存储到Map中的简单实现。包括自身属性及从父类继承得到的属性。Java类型的getField[s]方法只能获取public 类型的属性,getDeclaredFields则能获取所有声明的属性,同时,如果类的可见性非公有,则Field的get(Object)方法将取不到具体的属性值。

package com.wood.util; 

import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map; 

/**
*
* @ClassName: BeanToMapUtils
* @Description: TODO
* @author  wood
* @date   2014-10-31 下午09:52:41
*
 */
public class BeanToMapUtils {
  /**
   * getFileds获取所有public 属性<br/>
   * getDeclaredFields 获取所有声明的属性<br/>
   * @param bean
   * @return 将某个类及其继承属性全部添加到Map中
   */
  public static Map<String,Object> beanToMap(Object bean){
    Map<String,Object> result = new HashMap<String,Object>();
    if(bean==null){
      return result;
    } 

    Field[] fields = bean.getClass().getDeclaredFields();
    if(fields==null||fields.length==0){
      return result;
    } 

    for(Field field:fields){
      //重置属性可见(而且一般属性都是私有的),否则操作无效
      boolean accessible = field.isAccessible();
      if(!accessible){
        field.setAccessible(true);
      } 

      //获取属性名称及值存入Map
      String key = field.getName();
      try {
        result.put(key, field.get(bean));
      } catch (IllegalArgumentException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      } 

      //还原属性标识
      field.setAccessible(accessible);
    } 

    //获取父类属性
    fields = bean.getClass().getSuperclass().getDeclaredFields();
    if(fields==null||fields.length==0){
      return result;
    } 

    for(Field field:fields){
      //重置属性可见(而且一般属性都是私有的),否则操作无效
      boolean accessible = field.isAccessible();
      if(!accessible){
        field.setAccessible(true);
      } 

      //获取属性名称及值存入Map
      String key = field.getName();
      try {
        result.put(key, field.get(bean));
      } catch (IllegalArgumentException e) {
        e.printStackTrace();
      } catch (IllegalAccessException e) {
        e.printStackTrace();
      } 

      //还原属性标识
      field.setAccessible(accessible);
    } 

    return result;
  } 

  public static void main(String[] args) {
    Dog info = new Dog();
    info.setCountry("cc");
    info.setName("Dog"); 

    info.setCategory("gram");
    info.setOwner("wang"); 

    System.out.println(beanToMap(info));
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java编程基础测试题分享

    单选题:(每道题目2分) 1. 下列哪个声明是错误的?(B) A.  int i=10; B.  float f=1.1;     //float f=1.1f C.  double d=34.4; D.  byte b=127; long类型的数据加后缀L或者l float类型的数据加后缀F或者f 整数默认是int类型 浮点数默认是double类型 2. 下面哪个不是java中的关键字?(C) A. public B.  true C.  main D.  class 3. 下面程序哪个语句是

  • Java网络编程基础篇之单向通信 原创

    在网络编程中如果只要求客户机向服务器发送消息,不要求服务器向客户机发送消息,称为单线通信.客户机套接字和服务器套接字链接成功后,可估计通过输出流发送数据,服务器则通过输入流接受数据,下面是简单的单向通信的例子. 实例1:本实例是一个TCP服务器端程序,在 getserver() 方法中建立服务器套接字,调用getClienMessage()方法获取客户端信息.代码如下: import java.io.BufferedReader; import java.io.IOException; impo

  • spring基础系列之JavaConfig配置详解

    早以前,Spring推荐使用XML的方式来定义Bean及Bean之间的装配规则,但是在Spring3之后,Spring提出的强大的JavaConfig这种类型安全的Bean装配方式,它基于Java代码的灵活性,使得装配的过程也变得及其灵活. 使用JavaConfig来装配Bean拥有其自己的一套规则,我们在这里来看一看: 1.规则 规则一:@Configuration注解 我们在定义JavaConfig类时,都会在其上加注@Configuration注解,来表明这是一个配置类,@Configur

  • Java基础强化训练输入错误即结束进程

    银行取款的时候有一个规则,就是连续输入密码错误三次账户会被冻结.那么咱们现阶段的Java基础有没有能力去编写出一段类似的代码呢?请接着往下看. //java中连续输入错误(效仿银行卡输入错误三次就终止) //根据四叶玫瑰数来执行的 import java.util.*; public class A{ public static void main(String[] args){ // 输入一个4位数判断一个数是否是四叶玫瑰数 System.out.println("输四位数:");

  • Java基础将Bean属性值放入Map中的实例

    Java基础将Bean属性值放入Map中的实例 利用发射将Java对象的属性值以属性名称为键,存储到Map中的简单实现.包括自身属性及从父类继承得到的属性.Java类型的getField[s]方法只能获取public 类型的属性,getDeclaredFields则能获取所有声明的属性,同时,如果类的可见性非公有,则Field的get(Object)方法将取不到具体的属性值. package com.wood.util; import java.lang.reflect.Field; impor

  • Python 按字典dict的键排序,并取出相应的键值放于list中的实例

    方法一: def dict_to_numpy_method1(dict): dict_sorted=sorted(dict.iteritems(), key=lambda d:d[0]) results=[value for key,value in dict_sorted] 方法二: def dict_to_numpy_method2(dict): keys=dict.keys() keys.sort() results=[dic[key] for key in keys] 方法三: def

  • Java基础之Bean的创建、定位和使用

    一.前言 Bean是一个由Spring IoC容器实例化.组装和管理的对象.在 Spring 中,类的实例化.依赖的实例化.依赖的传入都交由 Spring Bean 容器控制,而不是用new方式实例化对象.通过非构造函数方法传入依赖等常规方式.这样可以减少垃圾回收对大量实例的回收工作. 在举例中使用到了三个类AAA,BBB和CCC.其中AAA和BBB是平等的两个类,可以相互调用.CCC是以BBB为构造参数的类. 二.自动装配Bean 2.1 注册Bean 为所有想要创建Bean的类添加@Comp

  • java 基础之JavaBean属性命名规范问题

    java 基础之JavaBean属性命名规范问题 JavaBean属性名要求:前两个字母要么都大写,要么都小写 下面我们来找找如果不遵循这个规范是个什么样子?? 因为本人还没有用反射来通过不规范的属性名来查找相应的属性值,所以以下的结论都是我的猜测.如果有错误欢迎大家来指正!!! package com.domain; import java.beans.BeanInfo; import java.beans.Introspector; import java.beans.PropertyDes

  • jsp实现将信息放入xml中的方法

    本文实例讲述了jsp实现将信息放入xml中的方法.分享给大家供大家参考,具体如下: 一.jsp代码: 省: <select id="province" name="province" onchange="jsSubmit()"> <option value="北京" selected="selected">北京</option> <option value=&quo

  • JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法

    本文实例讲述了JS基于递归算法实现1,2,3,4,5,6,7,8,9倒序放入数组中的方法.分享给大家供大家参考,具体如下: var array = [1, 2, 3, 4, 5, 6, 7, 8, 9]; function reverseDump(start) { start++; if (start > array.length / 2) { return; } var temp = array[start]; array[start] = array[array.length - start

  • python 把文件中的每一行以数组的元素放入数组中的方法

    有时候需要把文件中的数据放入到数组中,这里提供了一种方法,可以根据文件结尾的标记进行数据拆分,然后再把拆分的文件放入数组中 # -*-coding: utf-8 -*- f = open("username.txt","w") f.write("Lycoridiata\n") f.write("wulei\n") f.write("leilei\n") f.write("Xingyu\n"

  • JAVA 格式化JSON数据并保存到json文件中的实例

    使用fastjson格式化json数据并保存到文件 /** * 将JSON数据格式化并保存到文件中 * @param jsonData 需要输出的json数 * @param filePath 输出的文件地址 * @return */ public static boolean createJsonFile(Object jsonData, String filePath) { String content = JSON.toJSONString(jsonData, SerializerFeat

  • C#通过XML节点属性/属性值读取写入XML操作代码实例

    1.XML的内容如下: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><root>  <title>    <settings id = "0" name = "显示文字">欢迎您!智慧服务,互动体验......</settings>    <settings id = "1" name

  • Java 基础详解(泛型、集合、IO、反射)

    计划把 Java 基础的有些部分再次看一遍,巩固一下,下面以及以后就会分享自己再次学习的一点笔记!不是有关标题的所有知识点,只是自己觉得模糊的一些知识点. 1.对于泛型类而言,你若没有指明其类型,默认为Object: 2.在继承泛型类以及接口的时候可以指明泛型的类型,也可以不指明: 3.泛型也数据库中的应用: 写一个 DAO 类对数据库中的数据进行增删改查其类型声明为 <T> .每张表对应一个类,对应每一张表实现一个类继承该 DAO 类并指明 DAO 泛型为该数据表对应的类,再实现一个与该表匹

随机推荐