最近在工作中,遇到一个场景:接受到一个字符串数组,需要将其转为一个对象,反射实现的方法如下:

/**

* 将字符串数组转成对象:支持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对象相关推荐

  1. C# 传递数组参数_一维数组_二维数组

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  2. hive 如何将数组转成字符串_hive 将hive表数据查询出来转为json对象和json数组输出...

    1.将hive表数据查询出来转为json对象输出apache 一.将查询出来的数据转为一行一行,并指定分割符的数据json 二.使用UDF函数,将每一行数据做为string传入UDF函数中转换为jso ...

  3. python定义字符串数组_从字符串数组(或元组)在Python中创建动态sql“ in list”子句的“最佳”方法是什么?...

    我正在从Python(使用MySQLDb)运行一个动态MySQL查询,该查询包括一个包含字符串值的" in list"子句.执行此功能的函数将获取一个值数组.如果有帮助,我可以将该 ...

  4. java javascript数组_浅谈javascript和java中的数组

    javascript中的数组 数组的创建 直接创建方式  var str = ['java', 'js']; 使用new创建方式: var a = new Array(10);  //  定义长度为1 ...

  5. java声明不可变数组_如何使数组元素在Java中不可变?

    不,您不能使数组的元素不变. 但是java.util.Collections类的unmodifiableList()方法接受List接口的一个对象(实现其类的对象),并返回给定对象的不可修改形式.用户 ...

  6. 接收对象数组_示例: Bit数组

    " 本文来源于<The Go Programming Language>" 6.5. 示例: Bit数组 Go语言里的集合一般会用map[T]bool这种形式来表示,T ...

  7. python判断字符串是否回文_判断字符串是否为回文 python

    回文正序和逆序一样的字符串,例如abccba 方法一 def is_palindrome1(text): l = list(text) l.reverse() t1 = ''.join(l) if t ...

  8. java 2维数据便利_计算机等级考试二级java数组辅导

    数组(array)是相同类型变量的集合,可以使用共同的名字引用它.数组可被定义为任何类型,可以是一维或多维.数组中的一个特别要素是通过下标来访问它.数组提供了一种将有联系的信息分组的便利方法. 注意: ...

  9. java 最大子数组_[剑指offer题解][Java]连续子数组的最大和

    前言 众所周知,<剑指offer>是一本"好书". 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白. 对于剑指offer题解这个系列,我的 ...

最新文章

  1. iOS压缩动画 CGAffineTransform
  2. mysql storage_mySQL__storage课堂笔记和练习
  3. C# java 有关“字节序”的描述 .
  4. 持续集成(CI)- 各种工具的资料总结
  5. 独家总结| 基于深度学习的目标检测详解
  6. CMD/DOS下符号的作用参考
  7. java分部积分任务代码实现_数值积分 Java 实现
  8. android模拟点击webview,的Android的WebView点击模拟
  9. 小菜找实习-动态规划
  10. OpenGL超级宝典(第7版)之第八章基元处理
  11. 计算机视觉算法与应用汇总
  12. 和python哪个容易胖_哪些吃了最容易长胖呢?
  13. 中国大学MOOC中华茶礼仪真题及答案
  14. 微信公众号 微信服务号如何实现服务号点击消息跳转进入小程序
  15. 高并发测试工具webbench
  16. target=“_blank“有啥安全性问题?如何防范?
  17. 基于人本理念的绩效管理体系设计(一)
  18. python 爬取墨迹天气预报(超简单!该代码用于实际生产)
  19. Linux系统编程、网络编程-文件I/O
  20. 如何将多个快递物流的退回签收件归类为已签收

热门文章

  1. 移动端的touch事件详解
  2. jquery-slimscroll配置项说明
  3. 零基础学习SpringSecurity OAuth2 四种授权模式(理论+实战)(配套视频讲解)
  4. 动漫培训学校排行榜(最新)
  5. Response响应的中文乱码问题
  6. 图书管理系统心得体会
  7. python二维数组浅拷贝
  8. Oracle数据库表连接查询并分页SQL语句提示未明确定义列
  9. Word中公式编号对齐问题
  10. iOS App开发:最好的设计和开发工具