java动态对象的设计与实现
2018-03-14 23:11
155 查看
在一些较复杂的查询页面功能中,有这样的场景:查询条件数不固定,如级联变化或者隐藏收起,查询后展示动态结果集,如以日期为表头,则表头列数不固定。此时,该如何实现该业务?
本文将介绍通过动态对象的方法来实现最优方案。
对于js语言而言,一大亮点就是js对象可以动态地新增、删除属性、方法,非常方便,而对于java语言,则无法实现,如需在运行时修改对象的属性、方法,则需修改其字节码,显然工作量会较为庞大复杂,而且容易出现漏洞、不稳定,最快捷、方便的实现方式就是创建一个基类,在基类中定义一个hashMap属性,该map负责存储该对象除固定属性外的动态属性的键值对,另基类中需定义get/set方法去设置/获取key-value,如新建的对象需要动态拓展属性,则继承该基类即可。
代码实现如下:
本文将介绍通过动态对象的方法来实现最优方案。
对于js语言而言,一大亮点就是js对象可以动态地新增、删除属性、方法,非常方便,而对于java语言,则无法实现,如需在运行时修改对象的属性、方法,则需修改其字节码,显然工作量会较为庞大复杂,而且容易出现漏洞、不稳定,最快捷、方便的实现方式就是创建一个基类,在基类中定义一个hashMap属性,该map负责存储该对象除固定属性外的动态属性的键值对,另基类中需定义get/set方法去设置/获取key-value,如新建的对象需要动态拓展属性,则继承该基类即可。
代码实现如下:
/* * Copyright 2000-2020 ALPHA LAB.Inc All Rights Reserved. */ package com.alphalab.framework.domain; import java.util.HashMap; import java.util.Map; /** * 动态对象基类. * @author allen * @version 1.0.0 2018年1月24日 */ public class DynamicValueObject extends AbstractValueObject { /** * 动态对象属性集合. */ Map<String, Object> dynamicMap = new HashMap<String, Object>(); /** * 获取动态对象属性集合. * @return the dynamicMap */ public Map<String, Object> getDynamicMap() { return dynamicMap; } /** * 根据属性名返回属性值. * @param name 属性名 * @return Object */ public Object get(final String name) { return this.dynamicMap.get(name); } /** * 设置动态属性键值对. * @param name 属性名 * @param value 属性值 */ public void set(final String name, final Object value) { this.dynamicMap.put(name, value); } }
相关文章推荐
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- (Java实现) HDOJ 2023 求平均成绩 面向对象设计思想
- JAVA动态模块的设计实现以及如何通过newInstance()来创建带参的构造类实例
- Java之Vector向量类实现自动动态增长的对象数组-类似动态数组
- Java单例设计模式(实现Java的一个类只有一个对象)
- java数组反射实现动态的判断一个对象是否是数组并且对数组进行拆包输出
- 设计模式之动态代理(Java的JDK动态代理实现)
- Java数组反射实现动态的判断一个对象书否是数组,并且对数组进行拆包输出 。。
- Java动态获取某个接口下所有的实现类对象集合
- 利用Java反射机制和Javassist实现Java对象及其属性的动态创建生成
- Java动态获取某个接口下所有的实现类对象集合
- 设计模式之动态代理的代码实现(Java)
- Java动态获取某个接口下所有的实现类对象集合
- Java设计模式之代理模式2-动态代理(jdk实现)
- 设计模式:用Java动态代理实现AOP
- 模式对象设计模式Java实现(三)Strut2教程-java教程
- 如何在SpringMVC框架中利用Java反射机制和Javassist实现Java对象、属性、注解的动态创建生成
- java动态代理对象实现日志的拦截(annotation自定义注解方式)
- [置顶] JAVA动态对象装配实现 测试--初步实现bean的set/get功能
- Java代理设计模式(Proxy)的四种具体实现:静态代理和动态代理