@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. **...
植物病害分割系统源码&数据集分享
PHP开发的二级域名分发系统源码 已对接易支付 PHP7.2 需要安装SG11扩展 放进根目录 解压 然后 设置伪静态 一定要先设置伪静态 要不然404 最后打开你的域名直接进入安装步骤
微信小程序学易通(仿学习通)仅供学习参考
BP回归分析.xlsx
棒球运动物体检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
叶片检测系统源码分享[一条龙教学YOLOV8标注好的数据集一键训练_70+全套改进创新点发刊_Web前端展示]
Simpack与Abaqus联合仿真:车轨刚柔耦合模型建模全攻略,simpack与abaqus联合仿真教程 车轨刚柔耦合仿真教程 刚柔耦合模型 出simpack与abaqus联合仿真车轨刚柔耦合模型教程,包括柔性钢轨建模,fbi文件生成,钢弹簧浮置板搭建,轨道不平顺激励等,包括模型。 ,simpack; abaqus; 联合仿真; 车轨刚柔耦合; 柔性钢轨建模; FBI文件生成; 钢弹簧浮置板; 轨道不平顺激励; 刚柔耦合模型。,Simpack与Abaqus联合仿真车轨刚柔耦合模型教程
python脚本调用deepseek api 生成聊天机器人,前提需要自己购买api
魔众企业官网系统采用PHP+Mysql架构,是一款对SEO非常友好、功能全面、安全稳定、支持多终端展示并且使用起来极其简单的企业建站系统。 魔众企业官网系统,帮助企业完美展示自己的形象。 2022年08月17日魔众企业官网系统发布v5.1.0版本,增加了以下22个特性: ·[新功能] 文件上传切片最大2M,分片文件根据配置动态清除 ·[新功能] UEditorPlus升级到2.3.0 ·[新功能] 图标库新增 check-simple ·[新功能] Cookie库新增属性参数 ·[新功能] 登录界面全新改版大气美观 ·[新功能] 用户授权模块微信小程序优化 ·[新功能] 后台管理员角色新增备注字段 ·[新功能] 富文本组件新增 editor-ready 自定义事件 ·[新功能] Response新增停止执行抛出消息的方法 ·[新功能] Grid新增批量弹窗快捷操作方式 ·[新功能] Grid编辑操作名称可自定义 ·[新功能] Json组件增加高度可配置参数 ·[新功能] Type类型数据新增导出JS配置文件 ·[新功能] bodyProperties可为body标签增加属性 ·[系
"基于遗传算法GA的柔性作业车间调度问题(FJSP)求解方法研究及MATLAB代码实现",FJSP:遗传算法GA求解柔性作业车间调度问题(FJSP),提供MATLAB代码 ,FJSP; 遗传算法GA; 柔性作业车间调度; MATLAB代码; 求解。,FJSP的遗传算法GA求解MATLAB代码实现
2024免费毕业设计成品,包括源码+数据库+往届论文资料 启动教程:https://www.bilibili.com/video/BV11ktveuE2d 讲解视频:https://www.bilibili.com/video/BV1YfkHYwEME 二次开发教程:https://www.bilibili.com/video/BV1Cw2rY1ErC
.
java代码实现 心形输出
内容: 本研究观察并收集了来自苏珊沼泽图勒红潮汐恢复点(坐标:38.117843, -121.983199)的钩虾(Gammarus sp.),时间跨度为2021年1月至12月。所有观察和采集工作均在修复地点二级潮汐通道中不超过20厘米深的微咸水中进行,距离提供的GPS坐标0.25英里范围内。钩虾的采集是在加利福尼亚科学采集许可证编号S-201970002-20281-001下进行的。每月的野外观察和捕捉以5米的间隔在8个半永久性的20米样带上进行,这些样带设置在相同区域的芦苇和本地植物冠层中,其中0米表示潮汐通道边缘。我们通过使用火鸡吸管捕获离散的水池(约60克水)来测量浮游无脊椎动物的生物多样性。水样本经过0.125毫米滤网过滤后,用去离子水冲洗,并在玫瑰苯胺染色的70%乙醇溶液中保存。 该研究提供了5组数据集,详情请参见:"" ()。
基于S7-1200 PLC的西门子博途4×4立体车库控制系统:PLC组态仿真、电气原理图与IO表综合研究报告,基于plc的立体车库控制系统,西门子博途4×4立体车库控制系统,S7-1200PLC编程,wincc组态仿真,系统包括PLC组态仿真,电气原理图,PLC接线图,IO表,报告等 ,基于plc的立体车库控制; 西门子博途4x4立体车库控制系统; S7-1200PLC编程; wincc组态仿真; 控制系统组成(含PLC组态仿真); 电气原理图; PLC接线图; IO表; 报告,西门子S7-1200PLC驱动的立体车库控制系统开发与仿真研究
chromedriver-win32-135.0.7004.0 (Canary).zip