@Author:cjcj cj.yangjun@gmail.com <c-j.iteye.com>
最近在做WEB,觉得从JSP传值过来的POJO太繁琐...于是想用Map,但是跟"大冰块"讨论之后,Map有2个问题:
1,类型转换:后台取值需要做类型转换
2,特殊字符转换:用POJO有个好处在setXXX(xxx)方法时可以对xxx数据进行特殊处理
所以既不想创建很多非VO的POJO类(杂七杂八的非VO的POJO类显的代码不清晰),也想偷点懒....就设计了自己的一个存储数据的Map,不支持基本数据类型...如下,慢慢完善,欢迎大家提意见:
接口(为了拓展复杂数据类型):
public interface IMetadata {
public void setValue(Object value);
public Object getValue();
}
基本数据存储元:
package metadata;
import java.io.Serializable;
import java.lang.reflect.Constructor;
public class Metadata implements IMetadata, Serializable, Cloneable{
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* Indicate the meta-type
*/
private String type="java.lang.String";
/**
* The value of the meta
*/
private Object value;
public Metadata(Object value,String type){
this.type=type;
this.value=value;
}
public Object getValue() {
// TODO Auto-generated method stub
if(value==null)return null;
return cast();
}
private Object cast(){
try {
Class cls;
cls = Class.forName("java.lang."+type);
if(cls.isInstance(value))return value;
if(cls.isPrimitive())return value;
Constructor result=cls.getConstructor(new Class[]{String.class});
return result.newInstance(new Object[]{value.toString()});
}catch (Exception e) {
throw new IllegalArgumentException("无法转化[" + type + "]为类型");
}
}
public void setValue(Object value) {
this.value=value;
// TODO Auto-generated method stub
}
}
重载HashMap类:
import java.util.HashMap;
public class MetaMap extends HashMap{
/**
*
*/
private static final long serialVersionUID = 1L;
public Object get(Object key) {
Metadata result=(Metadata) super.get(key);
return result.getValue();
}
public Object put(Object key, Object value,String type){
return super.put(key, new Metadata(value,type));
}
public Object put(Object key,Object value){
return super.put(key, new Metadata(value,"String"));
}
}
测试代码:
package metadata;
import java.util.Map;
public class MetaTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Map map=new MetaMap();
Integer aa=new Integer(23);
map.put("数据一", aa);
map.put("数据二", 3242.432);
Integer num= (Integer) map.get("数据一");
if(num instanceof Integer){
System.out.println(num);
}
Float fl= (Float) map.get("数据二");
if(fl instanceof Float){
System.out.println(fl);
}
}
}
分享到:
相关推荐
为了确保分数总是处于最简形式,类中还包含了一个`predigest()`函数。该函数通过计算分子和分母的最大公约数(GCD),然后将分子和分母都除以这个最大公约数来实现分数的约分。这一过程确保了分数的最简化表示,避免...
通过设计Fraction类,我们引入了predigest()函数专门用于执行约分运算。该函数的具体算法实现是分数计算器的精髓,它确保了无论用户输入何种形式的分数,计算器都能输出最简分数。 程序流程图清晰地展示了整个...
Fraction predigest(); // 约分函数 void display(); }; ``` 五、实现函数 以下是实现函数的源代码: ```cpp void Integer::display() { cout ; cout 分数计算器-----------------" ; cout 请选 择 功 能:...
**化简模块**(`predigest()`): - 根据初始状态绘制资源分配图。 - 对不申请资源即可运行的进程进行预处理。 - 主体化简过程,包括标志位的设置以追踪是否化简了进程。 - 死锁检测并输出相关信息。 4. **...
一款基于机器学习的Web日志统计分析与异常检测命令行工具_hy4
基于RBAC权限控制的资产管理系统_hy5
318 Series Hardened Access Points 370 Series Outdoor Access Points 310 Series Campus Access Points IAP-315 IAP-314
最强PMP备考计划、知识整理、试题,并以本系统来展示_hy5
【官方】计算机职业英语一级考试样卷.pdf 【官方】全国机等级考试二级笔试样卷:存取(Access)数据库程序设计.pdf 【官方】全国计算机等级考试二级笔试样卷:C++语言程序设计.pdf 【官方】全国计算机等级考试二级笔试样卷:C语言程序设计.pdf 【官方】全国机等级考试二级笔试样卷:德尔菲(Delphi)语言程序设计.pdf 【官方】全国机等级考试二级笔试样卷:Java语言程序设计.pdf 【官方】全国机等级考试二级笔试样卷:视觉基础语言程序设计.pdf 【官方】全国机等级考试二级笔试样卷:视讯FoxPro数据库程序设计.pdf 【官方】全国计算机等级考试三级笔试样卷:PC技术,pdf 【官方】全国计算机等级考试三级笔试样卷:网络技术.pdf 【官方】全国计算机等级考试三级笔试样卷:信息管理技术,pdf 【官方】全国计算机等级考试四级笔试样卷:软件测试工程师.pdf 【官方】全国计算机等级考试四级笔试样卷:数据库工程师,pdf 【官方】全国计算机等级考试四级笔试样卷:数据库技术,pdf 【官方】全国计算机等级考试四级笔试样卷:网络工程师.pdf
SpringBoot网上商城#java#毕业设计#网上商城#springboot#课程设计#编程#thymeleaf_hy4
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
360 Series Outdoor Access Points 303 Series Campus Access Points 303H Series Hospitality Access Points 300 Series Campus Access Points
肽质量指纹图谱提取区域检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
分布式事务实战_hy4
python网络爬虫按月爬cctv新闻30分的视频_hy4
【golang】企业微信群机器人接口Golang封装
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
mumu-activemq是一个对老牌mq消息中间件的学习和测试项目,本人通过这个项目来熟悉activemq的消息发送流_hy4
【Python+HTML】基于flask的rbac学生权限管理系统,redis存储session_pgj