- 浏览: 1572074 次
- 来自: 上海
文章分类
- 全部博客 (374)
- Java (101)
- Struts (54)
- Oracle (30)
- JavaScript (16)
- Spring (27)
- Hibernate (16)
- MyEclipse (3)
- JSF (1)
- FreeMarker (2)
- SiteMesh (2)
- JfreeChart (2)
- Ibatis (2)
- JSP (12)
- MyBatis (4)
- SWFupload (1)
- EJB (4)
- Jboss (4)
- WebService (2)
- Linux (16)
- Android (2)
- XML (6)
- Java 网络编程 (13)
- AXIS2 (1)
- FTP (1)
- Jswing (1)
- Socket (3)
- 杂文选集 (6)
- solr (2)
- PS (1)
- Tomcat (7)
- JDBC (9)
- Highcharts (1)
- maven (1)
- Nodejs (0)
- navicat (2)
- Exception (5)
- eclipse (3)
- jQuery (1)
- springMVC (4)
- MySQL (11)
- SVN (1)
- Sql Server (1)
- zookeeper (1)
- JVM (1)
- Groovy (2)
- Git (1)
- Nginx (1)
- DynamicReport (1)
- IDEA (2)
- JasperReports (1)
- Postgresql (2)
- Mac (1)
- gradle (1)
- 数据结构算法 (1)
最新评论
-
hpu145:
引用引用
java 千分位的添加和去除 -
被遗忘的下路:
少了个junit-4.8.2的包
SSH2整合完整案例(四十三) -
白天看黑夜:
java过滤emoji字符处理,希望能帮到你http://ww ...
emoji 表情图片解决方法 -
caipeiming:
这个挺好JavaScript实现input输入框控件只允许输入 ...
js 控制文本框只能输入中文、英文、数字等 -
双子树:
东西太好啦受教啊
Struts2 JSP中将list,set ,Map传递到Action然后<s:iterator>遍历(三十五)
package com.enhance.reflect; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Array; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.LinkedList; import java.util.List; import org.apache.commons.lang.ArrayUtils; public class ReflectTest { public static void main(String[] args) throws Exception{ //反射List 集合 reflectCollection(); } /** * 反射获取集合属性 和 集合中的 泛型 * @throws Exception */ public static void reflectCollection() throws Exception{ List<Integer> nums=new ArrayList<Integer>(); nums.add(1); Person p =new Person(); p.setAge(18); p.setName("luck"); List<Person> list=new LinkedList<Person>(); list.add(p); List<Address> address = new ArrayList<Address>(); Address addr=new Address(); addr.setAddName("上海人民广场"); addr.setAddNo("add001"); address.add(addr); p.setAddress(address); TestA a=new TestA(); a.setNums(nums); a.setP(p); a.setAge(16); a.setBig(55); a.setData(list); TestB b=new TestB(); copyProperties(a,b); //BeanUtils.copyProperties(b,a); //只能copy 类型相同的, System.out.println("基本类型:"+b.getBig()); System.out.println("包装类型:"+b.getAge()); System.out.println("自定义类"+b.getP().getAge()); System.out.println("List<包装类型>:"+b.getNums().get(0)); System.out.println("List<自定义类>:"+b.getData().get(0).getAge()); System.out.println("List<自定义类.List>:"+b.getData().get(0).getAddress().get(0).getAddName()); } /** * 能 复制 相同类型的属性 * 也能复制 "属性名相同,类型不同" 的属性 * @param src 原对象 * @param dest 目标对象 * @throws Exception * Person ==> People * 注意:本程序省略 NoSuchMethodException 的判断 * 每获取 Method 都需要判断 NoSuchMethodException 后在 invoke */ public static void copyProperties(Object src,Object dest) { Class sclazz =src.getClass(); Class dclazz =dest.getClass(); //Object.class 为 stopClass 不反射的 Class PropertyDescriptor[] ps= new PropertyDescriptor[0]; try { ps = Introspector.getBeanInfo(dclazz,Object.class).getPropertyDescriptors(); for (PropertyDescriptor prop : ps) { Object srcVal=null; try { if(prop.getPropertyType() == Class.class){ //Class 不反射 continue; }else if(prop.getPropertyType().isPrimitive()){ //基本数据类型 srcVal=getValue(src,sclazz,prop.getReadMethod().getName()); if(srcVal !=null){ prop.getWriteMethod().invoke(dest,srcVal); } }else if(isWrapType(prop.getPropertyType().getName())){ //包装类型 srcVal=getValue(src,sclazz,prop.getReadMethod().getName()); if(srcVal !=null){ if(prop.getPropertyType().getName().equals("java.lang.Double")){ //Double BigDecimal newVal=new BigDecimal(srcVal.toString()); NumberUtil.setScale(newVal,2); prop.getWriteMethod().invoke(dest, NumberUtil.setScale(newVal,2)); }else { prop.getWriteMethod().invoke(dest, srcVal); } } }else if(prop.getPropertyType().getInterfaces() !=null && prop.getPropertyType().getInterfaces().length > 0 && prop.getPropertyType().getInterfaces()[0] == Collection.class){ //集合类型 Object obj=getValue(src,sclazz,prop.getReadMethod().getName()); if(obj !=null && obj instanceof Collection){ Collection srcList=(Collection)obj; Class collClazz=obj.getClass(); ParameterizedType pt= (ParameterizedType)prop.getReadMethod().getGenericReturnType(); Class type = (Class)pt.getActualTypeArguments()[0]; Object destList=collClazz.newInstance(); Method addMethod=collClazz.getMethod("add",Object.class); if(addMethod !=null) { for (Object object : srcList) { Object item = null; if (isWrapType(type.getName())) { Class parmClazz=String.class; try{ parmClazz = (Class)object.getClass().getField("TYPE").get(object); }catch (Exception e) { } item = type.getConstructor(parmClazz).newInstance(object); } else { item = type.newInstance(); copyProperties(object, item); } addMethod.invoke(destList, item); } } prop.getWriteMethod().invoke(dest, destList); } }else{//自定义类型 Class Object d=prop.getPropertyType().newInstance(); copyProperties(getValue(src,sclazz,prop.getReadMethod().getName()),d); prop.getWriteMethod().invoke(dest, d); } } catch (Exception e) { log.info("copyProperties ERROR:"+ ThrowableUtil.getStackTrace(e)); } } } catch (Exception e) { log.info("copyProperties ERROR:"+ ThrowableUtil.getStackTrace(e)); } } /** * 获取属性值 * @param obj * @param clazz * @param methodName * @return */ public static Object getValue(Object obj,Class clazz,String methodName){ Object value=null; try { Method method=clazz.getMethod(methodName); if(method !=null){ value=method.invoke(obj); } } catch (Exception e) { log.info("copyProperties.getValue method: "+methodName+",ERROR"+ ThrowableUtil.getStackTrace(e)); } return value; } /** * 是否是包装类型 * @param typeName * @return */ public static boolean isWarpType(String typeName){ String[] types = {"java.lang.Integer", "java.lang.Double", "java.lang.Float", "java.lang.Long", "java.lang.Short", "java.lang.Byte", "java.lang.Boolean", "java.lang.Character", "java.lang.String"}; return ArrayUtils.contains(types, typeName); } } public class TestA { private List<Integer> nums; private Person p; private Integer age; private int big; private List<Person> data; } public class TestB { private List<Integer> nums; private Integer age; private People p; private int big; private List<People> data; } public class People { private String name; private int age; List<Address> address; } public class Person { private String name; private int age; List<Address> address; } public class Address { private String addNo; private String addName; }
运行结果
发表评论
-
检测一个字符串是否在jvm的常量池中
2018-12-18 17:34 940public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2226经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 910import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1016/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 952//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1781更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1369import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 776import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2364import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 877// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1129import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 763import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1107import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3844import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 923/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 976import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1796Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 963/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2172package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1939PO(persistant object) 持久 ...
相关推荐
java反射,获取所有属性、方法以及List集合类
java反射获取所有属性,获取所有get方法,包括子类父类,以及包括List集合类
使用 Java 反射封装 JavaBean <br> 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean
利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类
实现list不同泛型之间实体的互转,基于java8新特性+反射机制实现list不同实体类互转,将jdk8的流处理集合互转抽出来成一个工具类,实现lsit
NULL 博文链接:https://shihuan830619.iteye.com/blog/805948
JAVA反射机制-Class类-Class对象的获取.pdf
通过反射从数据库返回集合ResultSet中得到实体对象的list集合
当我们从数据库读出数据得到ResultSet或RowSet的时候,我们的做法是遍历结果集,然后封装到pojo里面,再封装到List,那么,每次封装是不是很麻烦呢,前段时间小弟看了下反射的东西,试着写了个类,目的在于方便封装...
java List XMl转换DEMO List2XML 可指定导出字段 XML2List 采用JAVA反射机制讲XML转换成JAVABEAN
java利用反射,将Object和Map进行互相转换,list和map互相转换 java Map和Object转换,list和map转换
主要介绍了Java反射机制及Method.invoke详解,本文讲解了JAVA反射机制、得到某个对象的属性、得到某个类的静态属性、执行某对象的方法、执行某个类的静态方法等内容,需要的朋友可以参考下
反射,获取所有属性、方法以及List集合类
NULL 博文链接:https://1017401036.iteye.com/blog/2343705
而不是创建一个Object列表,你可以参数化java.util.List来创建一个String String列表,如下所示:当通过反射在运行时检查可参数化类型本
下面小编就为大家带来一篇java反射遍历实体类属性和类型,并赋值和获取值的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
java poi对于excel的读写与反射的结合使用,2个方法读2个方法写,是单独的源码文件,结合反射的方法读写各一个,还有个是list的2层集合excel读写方法,还包含使用到的简单函数封装
主要介绍了Java利用反射获取object的属性和值代码示例,具有一定借鉴价值,需要的朋友可以参考下。
本篇文章给大家带来的内容是关于java中List集合及其实现类的方法介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。下面我们就来学习一下吧