精华内容
下载资源
问答
  • java对象动态添加属性

    万次阅读 热门讨论 2018-09-03 16:53:28
    、不知道大家有没有遇到过这样的需求 ,就java运行的时候 动态给你java对象添加属性,最近在项目终于到了,想到了反射去实现,但是最终也没有搞出来。。。哎。。 有的时候 比如你用的是hibernate或者Spring jdb.....

    抓狂、不知道大家有没有遇到过这样的需求 ,就java运行的时候 动态给你java对象添加属性,最近在项目终于到了,想到了反射去实现,但是最终也没有搞出来。。。哎。。


    有的时候 比如你用的是hibernate或者Spring jdbc 来做dao层进行数据库相关的操作的时候,若果是单表的操作的时候 还比较简单 hibernate可直接返回(get,load)你的需要的po,spring3可以用rowmapper的实现类来处理这个操作,这些操作对于大家来说都是熟悉的不能在熟悉了。

    疑问、问题:当进行多个表进行连接的操作时候,如:

    select p.id,p.name,ad.address,ad.post_code from person  p join person_address ad on p.id = ad.person_id
     


    现在有两张表进行查询 ,查询出来是两个表的字段,hibernate中也许你会想创建一个含有这些字段的vo就可以了解决了 (或者基于这个查询建立以个视图 ,然后基于这个视图在用hibernate进行orm映射,),在spring3里会用到org.springframework.jdbc.core.BeanPropertyRowMapper如:

    this.jdbcTemplate.queryForObject(sql,BeanPropertyRowMapper.newInstance(PersonAdressVo.class));//返回PersonAdressVo对象
     

    是的这样的确可以解决,想想如果你的好的查询,而且结果都不一样,连接的表也是很多,那么你创建的vo或者是视图肯定是泛滥的,整个项目就会臃肿起来,这是我们不想看到的。

    大笑、现在说说解决方法:

    你可以在进行查询结果的时候,为你联合查询出来的Object 动态添加你查出来的属性;

    下面来说一下具体的代码:

    此时需要你需要cglib-nodep-2.2.jar,自己google下载

    DynamicBean.java

    
     
    1. package com.ajun.spring.orm;
    2. import java.util.Iterator;
    3. import java.util.Map;
    4. import java.util.Set;
    5. import net.sf.cglib.beans.BeanGenerator;
    6. import net.sf.cglib.beans.BeanMap;
    7. /**
    8. *
    9. * @author ajun
    10. *
    11. */
    12. public class DynamicBean {
    13. /**
    14. * 实体Object
    15. */
    16. private Object object = null;
    17. /**
    18. * 属性map
    19. */
    20. private BeanMap beanMap = null;
    21. public DynamicBean() {
    22. super();
    23. }
    24. @SuppressWarnings( "unchecked")
    25. public DynamicBean(Map propertyMap) {
    26. this.object = generateBean(propertyMap);
    27. this.beanMap = BeanMap.create( this.object);
    28. }
    29. /**
    30. * 给bean属性赋值
    31. * @param property 属性名
    32. * @param value 值
    33. */
    34. public void setValue(String property, Object value) {
    35. beanMap.put(property, value);
    36. }
    37. /**
    38. * 通过属性名得到属性值
    39. * @param property 属性名
    40. * @return
    41. */
    42. public Object getValue(String property) {
    43. return beanMap.get(property);
    44. }
    45. /**
    46. * 得到该实体bean对象
    47. * @return
    48. */
    49. public Object getObject() {
    50. return this.object;
    51. }
    52. /**
    53. * @param propertyMap
    54. * @return
    55. */
    56. @SuppressWarnings( "unchecked")
    57. private Object generateBean(Map propertyMap) {
    58. BeanGenerator generator = new BeanGenerator();
    59. Set keySet = propertyMap.keySet();
    60. for (Iterator i = keySet.iterator(); i.hasNext();) {
    61. String key = (String) i.next();
    62. generator.addProperty(key, (Class) propertyMap.get(key));
    63. }
    64. return generator.create();
    65. }
    66. }

    测试类:

    
     
    1. public static void main(String[] args) throws ClassNotFoundException {
    2. // 设置类成员属性
    3. HashMap propertyMap = new HashMap();
    4. propertyMap.put( "id", Class.forName( "java.lang.Integer"));
    5. propertyMap.put( "name", Class.forName( "java.lang.String"));
    6. propertyMap.put( "address", Class.forName( "java.lang.String"));
    7. // 生成动态 Bean
    8. DynamicBean bean = new DynamicBean(propertyMap);
    9. // 给 Bean 设置值
    10. bean.setValue( "id", new Integer( 123));
    11. bean.setValue( "name", "454");
    12. bean.setValue( "address", "789");
    13. // 从 Bean 中获取值,当然了获得值的类型是 Object
    14. System.out.println( " >> id = " + bean.getValue( "id"));
    15. System.out.println( " >> name = " + bean.getValue( "name"));
    16. System.out.println( " >> address = " + bean.getValue( "address"));
    17. // 获得bean的实体
    18. Object object = bean.getObject();
    19. // 通过反射查看所有方法名
    20. Class clazz = object.getClass();
    21. Method[] methods = clazz.getDeclaredMethods();
    22. for ( int i = 0; i < methods.length; i++) {
    23. System.out.println(methods[i].getName());
    24. }
    25. }

    在这里在举一个spring jdbc中查询多个表 ,返回一个动态bean的例子:
    首先是你在用spring3 jdbc进行查询的时候 这时候你想返回一个对象 此时你一般的做法是:

    
     
    1. String sql= "select p.id,p.name,ad.address,ad.post_code from person p join person_address ad on p.id = ad.person_id"; //此时你返回是多个表的结果
    2. this.jdbcTemplate.queryForObject(sql,BeanPropertyRowMapper.newInstance(PersonAddressVO.class), id); //返回一个含有多个表的属性的vo:PersonAddressVO
    随着你的业务的复杂也许你vo会很多 ,为了减少你vo的数量 ,应该动态返回一个bean 此时bean含有你想要的的属性。

    我们在用spring jdbc 进行查询 就行orm映射的时候 都要是首先实现org.springframework.jdbc.core.RowMapper,因为spring jdbc查询的时候你要进行orm要求一个参数必须为org.springframework.jdbc.core.RowMapper,所以此时我要实现org.springframework.jdbc.core.RowMapper里的public Object mapRow(ResultSet rs, int rowNum) f。

    
     

    里面我们会用前面的DynamicBean.java

    1. <code class="language-java">package com.ajun.spring.orm;  
    2.   
    3. import java.sql.ResultSet;  
    4. import java.sql.ResultSetMetaData;  
    5. import java.sql.SQLException;  
    6. import java.util.HashMap;  
    7.   
    8. import org.springframework.jdbc.core.RowMapper;  
    9. import org.springframework.jdbc.support.JdbcUtils;  
    10.   
    11.   
    12.   
    13. /** 
    14.  ********************************************************************************* 
    15.  * 例子:数据库:person_id <----->po:personId 请写好驼峰表示风格 
    16.  ********************************************************************************* 
    17.  * @author ajun 
    18.  */  
    19. @SuppressWarnings("unchecked")  
    20. public class CustomRowMapper implements RowMapper {  
    21.   
    22.       
    23.     @Override  
    24.     public Object mapRow(ResultSet rs, int rowNum) throws SQLException {  
    25.             return this.toDynamicObject(rs, rowNum);  
    26.     }  
    27.       
    28.     private  Object toDynamicObject(ResultSet rs, int rowNum) throws SQLException{  
    29.         DynamicBean dyBean  =null;  
    30.         ResultSetMetaData rsmd = rs.getMetaData();  
    31.         if(rsmd!=null){  
    32.             int columnCount = rsmd.getColumnCount();  
    33.             HashMap propertyMap = new HashMap();  
    34.             for (int index = 1; index <= columnCount; index++){//JdbcUtils自己查spring API  
    35.                 String column = JdbcUtils.lookupColumnName(rsmd, index);  
    36.                 String propertyName = JdbcUtils.convertUnderscoreNameToPropertyName(column);  
    37.                 propertyMap.put(propertyName, Object.class);//添加动态属性 此时person_address ==>personAddress  
    38.             }  
    39.             dyBean = new DynamicBean(propertyMap);  
    40.             for (int index = 1; index <= columnCount; index++){  
    41.                 String column = JdbcUtils.lookupColumnName(rsmd, index);  
    42.                 String propertyName = JdbcUtils.convertUnderscoreNameToPropertyName(column);  
    43.                 Object value = JdbcUtils.getResultSetValue(rs, index);  
    44.                 dyBean.setValue(propertyName, value);//设置值  
    45.             }  
    46.         }  
    47.         return dyBean.getObject();  
    48.     }  
    49.       
    50.       
    51.     public static  CopyOfCustomRowMapper newInstance() {  
    52.         CopyOfCustomRowMapper newInstance = new CopyOfCustomRowMapper();  
    53.         return newInstance;  
    54.     }  
    55.   
    56. }  
    57. </code>  
    
      
    1. package com.ajun.spring.orm;
    2. import java.sql.ResultSet;
    3. import java.sql.ResultSetMetaData;
    4. import java.sql.SQLException;
    5. import java.util.HashMap;
    6. import org.springframework.jdbc.core.RowMapper;
    7. import org.springframework.jdbc.support.JdbcUtils;
    8. /**
    9. *********************************************************************************
    10. * 例子:数据库:person_id <----->po:personId 请写好驼峰表示风格
    11. *********************************************************************************
    12. * @author ajun
    13. */
    14. @SuppressWarnings( "unchecked")
    15. public class CustomRowMapper implements RowMapper {
    16. @Override
    17. public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
    18. return this.toDynamicObject(rs, rowNum);
    19. }
    20. private Object toDynamicObject(ResultSet rs, int rowNum) throws SQLException{
    21. DynamicBean dyBean = null;
    22. ResultSetMetaData rsmd = rs.getMetaData();
    23. if(rsmd!= null){
    24. int columnCount = rsmd.getColumnCount();
    25. HashMap propertyMap = new HashMap();
    26. for ( int index = 1; index <= columnCount; index++){ //JdbcUtils自己查spring API
    27. String column = JdbcUtils.lookupColumnName(rsmd, index);
    28. String propertyName = JdbcUtils.convertUnderscoreNameToPropertyName(column);
    29. propertyMap.put(propertyName, Object.class); //添加动态属性 此时person_address ==>personAddress
    30. }
    31. dyBean = new DynamicBean(propertyMap);
    32. for ( int index = 1; index <= columnCount; index++){
    33. String column = JdbcUtils.lookupColumnName(rsmd, index);
    34. String propertyName = JdbcUtils.convertUnderscoreNameToPropertyName(column);
    35. Object value = JdbcUtils.getResultSetValue(rs, index);
    36. dyBean.setValue(propertyName, value); //设置值
    37. }
    38. }
    39. return dyBean.getObject();
    40. }
    41. public static CopyOfCustomRowMapper newInstance() {
    42. CopyOfCustomRowMapper newInstance = new CopyOfCustomRowMapper();
    43. return newInstance;
    44. }
    45. }
    调用的时候:

    
     
    1. String sql= "select p.id,p.name,ad.address,ad.post_code from person p join person_address ad on p.id = ad.person_id"; //此时你返回是多个表的结果
    2. List<Object> list = this.jdbcTemplate.query(sql, BeanPropertyRowMapper.newInstance()); //返回一个含有多个表的属性的动态bean

    在页面上你就可以用el表达式这样去出来:

    
     
    1. <c:forEach items="${list}" var="p">
    2. <tr>
    3. <td>${p.id} </td>
    4. <td>${p.name} </td>
    5. <td>${p.address} </td>
                            <td>${p.postCode}</td>
     
    </tr> </c:forEach>
     
     
    

     
    
    这样是不是很方便呢 ,呵呵 偷笑


     
    
     
    
     
    
     
    
     
    
     
    
     
    
     
    
    阅读更多 登录后自动展开
    展开全文
  • * @param addValMap 动态需要添加属性属性值 * @return 新的对象 * @throws Exception */ public Object dynamicClass(Object object,HashMap addMap, HashMap addValMap) throws Exception { HashMap ...

    Maven引用:

           <!-- https://mvnrepository.com/artifact/cglib/cglib -->
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>
    不要引用太高级的版本。会存在兼容问题。本身有内部依赖。
    核心类:

    import net.sf.cglib.beans.*;
     
    import java.util.*;
     
    public class DynamicBean {
        private Object object = null; //动态生成的类
        private BeanMap beanMap = null; //存放属性名称以及属性的类型
     
        public DynamicBean() {
            super();
        }
     
        public DynamicBean(Map propertyMap) {
            this.object = generateBean(propertyMap);
            this.beanMap = BeanMap.create(this.object);
        }
     
        /**
         * @param propertyMap
         * @return
         */
        private Object generateBean(Map propertyMap) {
            BeanGenerator generator = new BeanGenerator();
            Set keySet = propertyMap.keySet();
            for (Iterator i = keySet.iterator(); i.hasNext(); ) {
                String key = (String) i.next();
                generator.addProperty(key, (Class) propertyMap.get(key));
            }
            return generator.create();
        }
     
        /**
         * 给bean属性赋值
         *
         * @param property 属性名
         * @param value    值
         */
        public void setValue(Object property, Object value) {
            beanMap.put(property, value);
        }
     
        /**
         * 通过属性名得到属性值
         *
         * @param property 属性名
         * @return 值
         */
        public Object getValue(String property) {
            return beanMap.get(property);
        }
     
        /**
         * 得到该实体bean对象
         *
         * @return
         */
        public Object getObject() {
            return this.object;
        }
    }
    

    测试类: 

    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.util.*;
     
    public class ClassUtil {
     
        /**
         *
         * @param object   旧的对象带值
         * @param addMap   动态需要添加的属性和属性类型
         * @param addValMap  动态需要添加的属性和属性值
         * @return  新的对象
         * @throws Exception
         */
        public Object dynamicClass(Object object,HashMap addMap, HashMap addValMap) throws Exception {
            HashMap returnMap = new HashMap();
            HashMap typeMap = new HashMap();
     
     
            Class<?> type = object.getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(type);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (!propertyName.equals("class")) {
                    Method readMethod = descriptor.getReadMethod();
                    Object result = readMethod.invoke(object);
                    //可以判断为 NULL不赋值
                    returnMap.put(propertyName, result);
                    typeMap.put(propertyName, descriptor.getPropertyType());
                }
            }
     
            returnMap.putAll(addValMap);
            typeMap.putAll(addMap);
            //map转换成实体对象
            DynamicBean bean = new DynamicBean(typeMap);
            //赋值
            Set keys = typeMap.keySet();
            for (Iterator it = keys.iterator(); it.hasNext(); ) {
                String key = (String) it.next();
                bean.setValue(key, returnMap.get(key));
            }
            Object obj = bean.getObject();
            return obj;
        }
     
    }
    

    使用

    Order order = new Order();
            order.setId(1);
            order.setName("order1");
            List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();
     
            OrderDetail orderDetail = new OrderDetail();
            orderDetail.setOrderid(1);
            orderDetail.setOrderPrice("1USD");
            orderDetail.setOrderSku("Sku1");
     
            orderDetailList.add(orderDetail);
     
            OrderDetail orderDetail2 = new OrderDetail();
            orderDetail2.setOrderid(1);
            orderDetail2.setOrderPrice("2USD");
            orderDetail2.setOrderSku("Sku2");
            orderDetailList.add(orderDetail2);
     
            try {
                HashMap addMap = new HashMap();
                HashMap addValMap = new HashMap();
                addMap.put("orderDetail", Class.forName("java.util.List"));
                addValMap.put("orderDetail", orderDetailList);
                Object obj2= new ClassUtil().dynamicClass(order,addMap,addValMap);
     
                System.out.println(JSON.toJSONString(obj2));
            } catch (Exception e) {
                e.printStackTrace();
            }
    

     

     

    展开全文
  • Java动态添加属性字段

    万次阅读 2018-10-22 18:35:11
    因为列是动态的, 首先想到的就是后天拼接JSON格式字符串, 然后返回到前台, 组装表头及内容。 但是当前系统中easyUI版本为1.2,并不支持 data属性(官方从1.3.2开始支持)。所以只能返回list&lt;T&gt; 格式...

    说明:做项目中遇到一种场景,需要根据查询时间段, 获取时间段中中每个月份对应的金额(费用统计)。如截图中的两列

    因为列是动态的, 首先想到的就是后天拼接JSON格式字符串, 然后返回到前台, 组装表头及内容。 但是当前系统中easyUI版本为1.2,并不支持 data属性(官方从1.3.2开始支持)。所以只能返回list<T> 格式。

    网上一搜相关代码很多, 看客可以自己搜索一下。 我这里记录一下我当时使用场景及用法,已备以后使用。

     

    1.需要引用cglib jar包, 我用的版本是2.2

    2.建一个实体对象 DynamicBean.java 。主要用来处理对象。

    public class DynamicBean {
        private Object object = null; // 动态生成的类
    
        private BeanMap beanMap = null; // 存放属性名称以及属性的类型
    
        public DynamicBean() {
            super();
        }
    
        public DynamicBean(Map propertyMap) {
            this.object = generateBean(propertyMap);
            this.beanMap = BeanMap.create(this.object);
        }
    
        /**
         * @param propertyMap
         * @return
         */
        private Object generateBean(Map propertyMap) {
            BeanGenerator generator = new BeanGenerator();
            Set keySet = propertyMap.keySet();
            for (Iterator<String> i = keySet.iterator(); i.hasNext();) {
                String key = (String) i.next();
                generator.addProperty(key, (Class) propertyMap.get(key));
            }
            return generator.create();
        }
    
        /**
         * ��bean���Ը�ֵ
         * @param property ������
         * @param value ֵ
         */
        public void setValue(Object property, Object value) {
            beanMap.put(property, value);
        }
    
        /**
         * ͨ���������õ�����ֵ
         * @param property ������
         * @return ֵ
         */
        public Object getValue(String property) {
            return beanMap.get(property);
        }
    
        /**
         * 返回新生成的对象
         * @return
         */
        public Object getObject() {
            return this.object;
        }
    }

    3. 原来对象, 及需要拼接到对象中的属性字段集合处理方法。

    /**
    *参数说明:
    *  object : 查询结果数组中对象。
    *  moneyMap : 为对象对应所有月份数据集合
    *  解释:已经查询出一组账单对象集合List<Bill> , 而moneyMap为对象中的一个属性 
    *  Map<String,Bigdecimal>, 存放了月份及金额
    */
    private Object dynamicClass(Object object, Map<String, BigDecimal> moneyMap) throws Exception {
            // 字段 - 值 集合
            HashMap<String, Object> returnMap = new HashMap<String, Object>();
            // 字段 - 字段类型 集合
            HashMap<String, Object> typeMap = new HashMap<String, Object>();
            // 获取传入类
            Class<? extends Object> type = object.getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(type);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            // 获取对象中已存在的数据
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (!propertyName.equals("class") && !propertyName.equals("monthMap")) {
                    Method readMethod = descriptor.getReadMethod();
                    Object result = readMethod.invoke(object, new Object[0]);
                    if (result != null) {
                        returnMap.put(propertyName, result);
                    } else {
                        String propertyType = descriptor.getPropertyType().toString();
                        if (propertyType.contains("java.math.BigDecimal")) {
                            returnMap.put(propertyName, new BigDecimal(0));
                        } else {
                            returnMap.put(propertyName, "");
                        }
                    }
                    typeMap.put(propertyName, descriptor.getPropertyType());
                }
            }
            // 获取月份数据, 变为字段属性
            Set<String> monthKeys = moneyMap.keySet();
            for (Iterator<String> it = monthKeys.iterator(); it.hasNext();) {
                String key = (String) it.next();
                // 字段类型
                typeMap.put(key, Class.forName("java.math.BigDecimal"));
                // 字段对应值
                returnMap.put(key, moneyMap.get(key));
            }
            // map转换成实体对象
            DynamicBean bean = new DynamicBean(typeMap);
            // 赋值
            Set<String> keys = typeMap.keySet();
            for (Iterator<String> it = keys.iterator(); it.hasNext();) {
                String key = (String) it.next();
                bean.setValue(key, returnMap.get(key));
            }
            Object obj = bean.getObject();
            return obj;
        }

     

    做笔记使用, 说不定以后还会用到。

    展开全文
  • java动态对象添加属性并赋值

    万次阅读 2019-04-18 22:00:43
    * @param addValMap 动态需要添加属性属性值 * @return 新的对象 * @throws Exception */ public Object dynamicClass(Object object,HashMap addMap, HashMap addValMap) throws Exception { HashMap ...

    最近工作中剥离通用功能比较多。

    Maven引用:

           <!-- https://mvnrepository.com/artifact/cglib/cglib -->
            <dependency>
                <groupId>cglib</groupId>
                <artifactId>cglib</artifactId>
                <version>2.2.2</version>
            </dependency>

    不要引用太高级的版本。会存在兼容问题。本身有内部依赖。

    核心类:

    import net.sf.cglib.beans.*;
    
    import java.util.*;
    
    public class DynamicBean {
        private Object object = null; //动态生成的类
        private BeanMap beanMap = null; //存放属性名称以及属性的类型
    
        public DynamicBean() {
            super();
        }
    
        public DynamicBean(Map propertyMap) {
            this.object = generateBean(propertyMap);
            this.beanMap = BeanMap.create(this.object);
        }
    
        /**
         * @param propertyMap
         * @return
         */
        private Object generateBean(Map propertyMap) {
            BeanGenerator generator = new BeanGenerator();
            Set keySet = propertyMap.keySet();
            for (Iterator i = keySet.iterator(); i.hasNext(); ) {
                String key = (String) i.next();
                generator.addProperty(key, (Class) propertyMap.get(key));
            }
            return generator.create();
        }
    
        /**
         * 给bean属性赋值
         *
         * @param property 属性名
         * @param value    值
         */
        public void setValue(Object property, Object value) {
            beanMap.put(property, value);
        }
    
        /**
         * 通过属性名得到属性值
         *
         * @param property 属性名
         * @return 值
         */
        public Object getValue(String property) {
            return beanMap.get(property);
        }
    
        /**
         * 得到该实体bean对象
         *
         * @return
         */
        public Object getObject() {
            return this.object;
        }
    }

    帮助类:

    import java.beans.BeanInfo;
    import java.beans.Introspector;
    import java.beans.PropertyDescriptor;
    import java.lang.reflect.Method;
    import java.util.*;
    
    public class ClassUtil {
    
        /**
         *
         * @param object   旧的对象带值
         * @param addMap   动态需要添加的属性和属性类型
         * @param addValMap  动态需要添加的属性和属性值
         * @return  新的对象
         * @throws Exception
         */
        public Object dynamicClass(Object object,HashMap addMap, HashMap addValMap) throws Exception {
            HashMap returnMap = new HashMap();
            HashMap typeMap = new HashMap();
    
    
            Class<?> type = object.getClass();
            BeanInfo beanInfo = Introspector.getBeanInfo(type);
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
            for (int i = 0; i < propertyDescriptors.length; i++) {
                PropertyDescriptor descriptor = propertyDescriptors[i];
                String propertyName = descriptor.getName();
                if (!propertyName.equals("class")) {
                    Method readMethod = descriptor.getReadMethod();
                    Object result = readMethod.invoke(object);
                    //可以判断为 NULL不赋值
                    returnMap.put(propertyName, result);
                    typeMap.put(propertyName, descriptor.getPropertyType());
                }
            }
    
            returnMap.putAll(addValMap);
            typeMap.putAll(addMap);
            //map转换成实体对象
            DynamicBean bean = new DynamicBean(typeMap);
            //赋值
            Set keys = typeMap.keySet();
            for (Iterator it = keys.iterator(); it.hasNext(); ) {
                String key = (String) it.next();
                bean.setValue(key, returnMap.get(key));
            }
            Object obj = bean.getObject();
            return obj;
        }
    
    }
    

     

    使用:

            Order order = new Order();
            order.setId(1);
            order.setName("order1");
            List<OrderDetail> orderDetailList = new ArrayList<OrderDetail>();
    
            OrderDetail orderDetail = new OrderDetail();
            orderDetail.setOrderid(1);
            orderDetail.setOrderPrice("1USD");
            orderDetail.setOrderSku("Sku1");
    
            orderDetailList.add(orderDetail);
    
            OrderDetail orderDetail2 = new OrderDetail();
            orderDetail2.setOrderid(1);
            orderDetail2.setOrderPrice("2USD");
            orderDetail2.setOrderSku("Sku2");
            orderDetailList.add(orderDetail2);
    
            try {
                HashMap addMap = new HashMap();
                HashMap addValMap = new HashMap();
                addMap.put("orderDetail", Class.forName("java.util.List"));
                addValMap.put("orderDetail", orderDetailList);
                Object obj2= new ClassUtil().dynamicClass(order,addMap,addValMap);
    
                System.out.println(JSON.toJSONString(obj2));
            } catch (Exception e) {
                e.printStackTrace();
            }

     

    展开全文
  • java 对象中集合属性及复制

    千次阅读 2018-12-21 12:53:16
    java 对象中集合属性及复制 本文我们介绍集合属性的复制场景及多种实现方式。 对象中集合属性 实际应用中对象中的集合属性很常见,表达一对多的关系。如用户有多个地址,订单包括多个产品等。一般我们需要定义集合...
  • 在开发过程中经常会遇到java对象属性特征不确定的情况,比如属性的名称,属性的类型,属性的取值等不确定的情况,如何在java...动态的设置java对象属性值?借助java反射机制以及javassist能够轻松解决这些问题。
  • Java 动态为类添加属性

    千次阅读 2019-10-11 09:28:37
    “衰兰送客咸阳道,天若有情天亦老” 序 有一个这样的功能:展示一个报表,表头是动态的,可以手动新增或删除,也就是说会修改表结构,...但是这里说说给实体类动态添加属性。 实现代码 import com.google.common...
  • 下面小编就为大家带来一篇遍历json 对象的属性并且动态添加属性的实现。小编觉的挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • java 对象转JSON 属性为空

    千次阅读 2015-04-27 17:19:34
    Java 对象转JSON 属性为空,请检查 类中属性是否带有标准的GET和SET方法 for example: public class example implements Serializable { public String entityName; public String dataSourceName;   ...
  • 下面小编就为大家带来一篇Java通过反射机制动态设置对象属性值的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Java动态生成类以及动态添加属性

    万次阅读 2017-11-18 16:14:20
    有个技术实现需求:动态生成类,其中类中的属性来自参数对象中的全部属性以及来自参数对象properties文件。 那么技术实现支持:使用CGLib代理。 具体的实现步骤: 1.配置Maven文件: xmlns:xsi=...
  • Java对象属性比较排序

    千次阅读 2018-08-16 15:38:26
     关于Java中的排序,我们常见的就是对Array、List进行排序,对于Array,我们可以使用Arrays.sort(数组)进行排序;对于List,我们可以使用Collections.sort(list)进行排序,如果是需要对一个实体类的对象进行排序呢?...
  • java 复制非空对象属性

    千次阅读 2017-02-15 11:31:27
    很多时候,我们需要通过对象拷贝,比如说VO类与数据库实体bean类、更新时非空对象不更新,对同一对象不同数据分开存储等 用于对象拷贝,spring 和 Apache都提供了相应的工具类方法,BeanUtils.copyProperties 但是...
  • btn2Click:function(){ this.items[0]={message:"Change Test",id:'10'} }
  • 利用cglib库给对象动态添加属性

    千次阅读 2015-12-24 10:29:05
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> package com.lrq.cglib;...import java.util.Map; import net.sf.cglib.b
  • 自己用java编写的一个对象属性编辑器,类似微软的属性编辑器。上传的是一个Deom.Deom是netBeans6.9的一个项目。真正的类库在lib文件夹下,用netbeans打开后请把lib文件下的库添加到项目里。类库没有源文件,抱歉...
  • 动态增加和删除对象属性

    千次阅读 2019-04-17 18:17:37
    特别是动态添加和删除对象属性增加对象属性用push来动态拼接。 ``` for(let i=0;i<this.reimMachineInvoice.length;i++){ for(let j=0;j<this.reimMachineInvoice[i].reimMachineI...
  • 在工作用要用到给jd对象动态添加属性的要求,在网上找到了一种解决方式,实例如下: 1、demo var aa="maker"; var bb=123; var lists={}; eval("lists."+aa+"="+bb); eval('('+"lists."+aa+"="+bb+')'); console.log...
  • Java对象属性转为Map

    千次阅读 2019-10-22 21:42:16
    1、在pom.xml中添加依赖包 <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-core</artifactId> <version>4.3.1</version> </dependency&...
  • java 对象属性初始化顺序

    千次阅读 2018-05-30 16:19:56
    1、为静态属性分配内存并赋值(后面大括号语句不执行,这里是初始化,只是添加变量和值)   或 执行静态代码块(立刻执行大括号里面的语句)  为什么这样说呢,因为谁在前先加载谁,包括静态属性之间,和静态块...
  • 根据对象中字段属性值,动态调用相应的get方法 #### 举个例子,把对象GoodsVO中的字段作为key, get方法作为value,全部存放在Map中. //商品对象 public class GoodsVO { /** * 品牌ID */ private Long ...
  • java动态给实体类添加属性

    千次阅读 2020-04-10 11:01:19
    java动态给实体类添加属性 需要的jar包有两个:cglib-3.1.jar 和 google-collections-1.0.jar 如果是maven项目,就不需要cglib-3.1.jar,直接用spring自带的 org.springframework.cglib即可。 1、创建一个实体:...
  • Java初始化对象属性值的方式

    千次阅读 2020-04-05 00:12:57
    Java初始化对象属性值的方式 1、数据库设计 一般我们在数据库设计时很多字段都会设计一个非空值,如下sql: CREATE TABLE `student` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` Varchar(64) Not ...
  • var data = {}; // 如果data已经定义就跳过 data.sex="true"; 或者(如果属性名称中有空格) data["sex haha"]="true"; ...//////////////////更复杂的///////////////////var data={}//定义一...//添加属性result dat

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 708,385
精华内容 283,354
关键字:

java对象动态增加属性

java 订阅