- 浏览: 1592232 次
- 来自: 上海
文章分类
- 全部博客 (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 1007public static boolean inPool( ... -
UTC时间, GMT时间 ,夏令时
2017-08-18 15:12 2285经常混淆于此,特地研究了一下,记录在此以备忘。 整个地 ... -
JDK1.5 Exchange 两个线程互换数据
2016-08-04 18:00 1006import java.util.concurrent ... -
JDK1.5 CountDownLatch
2016-08-04 16:25 1057/* * 还有一个利用场景: ... -
java CyclicBarrier 循环障碍阻塞
2016-08-03 23:54 1014//一个同步辅助类,它允许一组线程互相等待,直到到达某个公 ... -
java 信号灯 Semaphore
2016-08-03 23:53 1828更多介绍http://blog.csdn.net/java20 ... -
java 使用读写锁设计一个缓存模型
2016-08-03 23:49 1420import java.util.HashMap; ... -
java 读写锁
2016-08-03 23:46 820import java.util.Random; i ... -
java 多个线程之间同步通信
2016-08-02 17:16 2401import java.util.concurrent ... -
jdk1.5 锁 Lock 和 Condition
2016-08-02 17:03 927// lock 练习 public class Lock ... -
JDK1.5 获取线程执行结果 Callable Future
2016-08-02 15:08 1176import java.util.Random; i ... -
JDK1.5 线程池
2016-08-02 14:48 806import java.util.concurrent ... -
java 多线程ThreadLocal
2016-08-02 00:13 1149import java.util.Random; ... -
java 定时器 Timer
2016-08-01 16:53 3897import java.util.Calendar; ... -
java 多线程同步+通信
2016-08-01 16:48 970/** *父子线程 交替打印10 次, 100次 ... -
java 线程同步
2016-08-01 16:43 1027import java.util.concurrent.l ... -
java多线程练习
2016-08-01 16:35 1843Java 传统多线程 Java 多线程同步 Java 多线 ... -
java 传统多线程
2016-08-01 16:34 1011/** * 传统多线程 */ public ... -
java 图片,剪切,缩放
2016-01-06 10:21 2234package out; import ja ... -
java术语(PO/POJO/VO/BO/DAO/DTO)
2014-11-27 11:45 1990PO(persistant object) 持久 ...
相关推荐
本篇文章将深入探讨如何使用Java反射来获取一个类的所有属性、方法,并处理List集合类。 首先,让我们了解Java反射的基础概念。在Java中,`java.lang.Class`类代表运行时的类信息。我们可以使用`Class.forName()`...
本话题将深入探讨如何利用Java反射机制将List对象转换为JSON格式。 在Java中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在处理数据传输或存储...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射主要用于在运行时分析类和对象,包括访问私有成员、调用私有方法、创建动态代理等。...
这个压缩包文件“基于java8新特性+反射机制实现list不同实体类互转.zip”提供了一种解决方案,它利用了Java 8的新特性和反射机制来实现这种转换,并将这个功能封装为一个工具类。 首先,Java 8引入了许多新特性,...
使用 Java 反射封装 JavaBean <br> 说明:这个程序在没有使用Hiberante时挺有用的 需要一个数据库查询语句 对应的JavaBean的全名(现在是Class,原来Class.getName()) 返回List包含多个JavaBean
Java反射是Java编程语言中的一个强大特性,它允许运行时的程序访问并操作类、接口、字段和方法等对象,即使这些对象在编译时并未被明确地引用。这一特性使得Java具有高度的动态性,使得代码能够在运行时检查类的信息...
本笔记主要涵盖了四个核心知识点:Java反射机制、流(I/O流)、内存管理和Java学习的基础。以下是对这些主题的详细阐述: 一、Java反射机制 Java反射机制是Java语言的一个强大特性,允许程序在运行时检查类、接口、...
Java反射是Java编程语言中的一个强大工具,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON...
Java反射机制是Java编程语言中的一个重要特性,它允许程序在运行时动态地获取类的信息并操作类的对象。这种机制使得Java具有高度的灵活性和动态性,可以在编译时未知类的情况下进行类的加载、实例化、方法调用等操作...
利用jxl包结合java反射机制和注释,直接把list生成对应的Excel文件,即只需传入list、对应生成的对象、标题就可以生成excel文件write(String title, List list,Class c),实现一个简单生成excel工具类
Java 中 List 排序 Java 中 List 排序是指在数据库中查出来的列表中对不同的字段重新排序。一般的做法都是使用排序的字段,重新到数据库中查询。如果不到数据库查询,直接在第一次查出来的 List 中排序,无疑会提高...
### JAVA反射机制——Class类与Class对象的获取 #### 概述 在Java语言中,反射是一种强大的功能,允许程序在运行时动态地检查和修改自身的行为。这种能力是通过`java.lang.Class`类实现的,它提供了封装类或接口...
这个“java反射获取参数.zip”文件很可能是关于如何利用Java反射获取类的属性、方法,特别是对于List集合类的操作。 首先,我们来详细解释Java反射的基本概念。在Java中,每个类都有一个Class对象,这个对象包含了...
当我们从数据库读出数据得到ResultSet或RowSet的时候,我们的做法是遍历结果集,然后封装到pojo里面,再封装到List,那么,每次封装是不是很麻烦呢,前段时间小弟看了下反射的东西,试着写了个类,目的在于方便封装...
Java反射与泛型是Java编程中的两个重要特性,它们各自为开发者提供了强大的工具来增强代码的灵活性和类型安全性。在本教程中,我们将深入探讨这两个主题,帮助你更好地理解和运用它们。 **Java反射** Java反射机制...
总的来说,Java反射机制在数据库操作中的应用主要体现在以下几个方面: 1. 动态实例化对象,适应不同的数据模型。 2. 调用对象的通用方法,如CRUD操作。 3. 访问和修改对象的私有属性,对应数据库的字段。 4. 结合`...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查并操作类、接口、字段和方法的信息。这种动态类型的能力使得Java代码能够处理未知或未提前定义的对象,增强了程序的灵活性和可扩展性。在"Java...
java利用反射,将Object和Map进行互相转换,list和map互相转换 java Map和Object转换,list和map转换
本文将深入探讨如何利用Java反射机制来实现Excel的导入和导出,并生成相应的实体类。 首先,我们需要理解反射的基本概念。在Java中,`java.lang.Class`类代表运行时的类信息,通过`Class.forName()`或对象的`...