java字符串转对象数组_将字符串数组转为java对象
最近在工作中,遇到一个场景:接受到一个字符串数组,需要将其转为一个对象,反射实现的方法如下:
/**
* 将字符串数组转成对象:支持double int boolean string
* @param valueList 值数组列表
* @param properties 属性数组
* @param c 目标class对象
* @return 返回null时丢弃此结果
*/
public List convertToDomain(List valueList,String[] properties,Class c){
List result=new ArrayList(valueList.size());
for(String[] values:valueList){
try {
T bean = c.newInstance();
for (int i = 0; i
String name = properties[i];
String value = values[i];
//获取属性类型
PropertyDescriptor descriptor=new PropertyDescriptor(name,c);
Class nameType = descriptor.getReadMethod().getReturnType();
// double
if (nameType == Double.class || nameType == double.class) {
if (DataUtil.isDoubleNumeric(value)) {
PropertyUtils.setProperty(bean, name,
Double.valueOf(value));
} else {
PropertyUtils.setProperty(bean, name, 0.00);
}
// int
} else if (nameType == Integer.class
|| nameType == int.class) {
if (DataUtil.isIntNumeric(value)) {
PropertyUtils.setProperty(bean, name,
Integer.valueOf(value));
} else {
PropertyUtils.setProperty(bean, name, 0);
}
// boolean
} else if (nameType == boolean.class
|| nameType == Boolean.class) {
if (DataUtil.isBooleanValue(value)) {
PropertyUtils.setProperty(bean, name,
Boolean.valueOf(value));
}
// 默认字符串
} else if (nameType == String.class) {
PropertyUtils.setProperty(bean, name, value);
}else{
log.error("convertToDomain error:字段类型不属于double int boolean string 字段="+name);
}
}
result.add(bean);
} catch (Exception e) {
e.printStackTrace();
}
}
return result;
}
基本思路
1:将数组元素的顺序与对象属性做映射,并由参数指定。
2:获取指定属性的类型,根据指定类型进行设值。
难点
1:确定元素类型,将以下几种方法做以下比较
getField 只能获取public的字段信息,但是实际情况中基本都是private
getDeclaredFields 能够获取字段信息,但是无法获取继承类的字段信息,比较坑爹。
PropertyDescriptor 可以便捷的拿到属性描述符:
PropertyDescriptor descriptor=new PropertyDescriptor(name,c);
Class nameType = descriptor.getReadMethod().getReturnType();
2:同一个类的class在jvm中只保存一份,所以判断用==而不是equals,这样子语义更加准确
nameType == Double.class || nameType == double.class
3:PropertyUtils.setProperty(bean, name, value):此方法不会根据字段类型,自动对value进行转型,
比如,name是 int,value是String,此方法不会进行Integer.valueOf(value)操作,坑爹
java字符串转对象数组_将字符串数组转为java对象相关推荐
- C# 传递数组参数_一维数组_二维数组
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- hive 如何将数组转成字符串_hive 将hive表数据查询出来转为json对象和json数组输出...
1.将hive表数据查询出来转为json对象输出apache 一.将查询出来的数据转为一行一行,并指定分割符的数据json 二.使用UDF函数,将每一行数据做为string传入UDF函数中转换为jso ...
- python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...
我正在从Python(使用MySQLDb)运行一个动态MySQL查询,该查询包括一个包含字符串值的" in list"子句.执行此功能的函数将获取一个值数组.如果有帮助,我可以将该 ...
- java javascript数组_浅谈javascript和java中的数组
javascript中的数组 数组的创建 直接创建方式 var str = ['java', 'js']; 使用new创建方式: var a = new Array(10); // 定义长度为1 ...
- java声明不可变数组_如何使数组元素在Java中不可变?
不,您不能使数组的元素不变. 但是java.util.Collections类的unmodifiableList()方法接受List接口的一个对象(实现其类的对象),并返回给定对象的不可修改形式.用户 ...
- 接收对象数组_示例: Bit数组
" 本文来源于<The Go Programming Language>" 6.5. 示例: Bit数组 Go语言里的集合一般会用map[T]bool这种形式来表示,T ...
- python判断字符串是否回文_判断字符串是否为回文 python
回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...
- java 2维数据便利_计算机等级考试二级java数组辅导
数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...
- java 最大子数组_[剑指offer题解][Java]连续子数组的最大和
前言 众所周知,<剑指offer>是一本"好书". 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白. 对于剑指offer题解这个系列,我的 ...
最新文章
- iOS压缩动画 CGAffineTransform
- mysql storage_mySQL__storage课堂笔记和练习
- C# java 有关“字节序”的描述 .
- 持续集成(CI)- 各种工具的资料总结
- 独家总结| 基于深度学习的目标检测详解
- CMD/DOS下符号的作用参考
- java分部积分任务代码实现_数值积分 Java 实现
- android模拟点击webview,的Android的WebView点击模拟
- 小菜找实习-动态规划
- OpenGL超级宝典(第7版)之第八章基元处理
- 计算机视觉算法与应用汇总
- 和python哪个容易胖_哪些吃了最容易长胖呢?
- 中国大学MOOC中华茶礼仪真题及答案
- 微信公众号 微信服务号如何实现服务号点击消息跳转进入小程序
- 高并发测试工具webbench
- target=“_blank“有啥安全性问题?如何防范?
- 基于人本理念的绩效管理体系设计(一)
- python 爬取墨迹天气预报(超简单!该代码用于实际生产)
- Linux系统编程、网络编程-文件I/O
- 如何将多个快递物流的退回签收件归类为已签收