当前位置:首页 > 开发 > 编程语言 > Java > 正文

java反射 工具类

发表于: 2012-07-08   作者:晨必须的   来源:转载   浏览:
摘要:   import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletRequest; /**

 

import java.lang.reflect.InvocationTargetException;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

/**

 * @className:ReflectionUtil.java

 * @classDescription: 反射工具类

 * @author:qiuchen

 * @createTime:2012-7-4

 */

public class ReflectionUtil {

 

public static boolean isShow = true;

 

/**

* 获得一个对象的属性值

* @author:qiuchen

* @createTime:2012-7-4

* @param obj 目标对象

*/

@SuppressWarnings("unchecked")

public static String getFieldValue(Object obj){

if (isShow) return getFieldValue(obj, isShow);

return null;

}

 

/**

* 打印一个对象的属性值

* @author:qiuchen

* @createTime:2012-7-8

* @param obj

*/

public static void printFieldValue(Object obj){

if (isShow) System.out.println(getFieldValue(obj, isShow));

}

 

 

/**

* 获得一个对象的属性值

* @author:qiuchen

* @createTime:2012-7-4

* @param obj 目标对象

*/

@SuppressWarnings("unchecked")

private static String getFieldValue(Object obj,boolean isShow){

Class cls = obj.getClass();

        Method[] methods = cls.getDeclaredMethods();//获得类的方法集合

        StringBuffer buffer = new StringBuffer();

        try {

        for (Method method : methods) {

if(method!=null && method.getName().startsWith("get")){

Object value = method.invoke(obj,null);

value = method.getName().substring(3)+":"+value+","; 

buffer.append(value);

}

}

        } catch (Exception e) {

        e.printStackTrace();

        }

        return cls.toString()+"["+buffer.toString()+"]"; 

}

 

/**

* Servlet从页面表单域中取值,封装到一个JavaBean中

* *****页面表单域部分所有实体属性必须小写

 * *****目前仅仅支持基本数据类型的赋值

* @author:qiuchen

* @createTime:2012-7-8

* @param <T>泛型,可以代替任何java对象

* @param request请求对象

* @param beanClass表单JavaBean类对象

* @return 表单JavaBean实例

*/

@SuppressWarnings("unchecked")

public static <T> T buildBean(HttpServletRequest request,Class<T> beanClass){

 

//beanClass all setMethod

List<Method> setMethods = new ArrayList<Method>();

 

//beanClass all setMethod'name

List<String> setMethodNames = new ArrayList<String>();

 

//beanClass all property'name

List<String> propertyNames = new ArrayList<String>();

 

//page form values

List<String> formValues = new ArrayList<String>();

 

//beanClass all Method

Method[] methods = beanClass.getDeclaredMethods();

 

//catch all setMethod

for(Method m : methods){

if(m!=null && m.getName().startsWith("set")) setMethods.add(m);

}

 

//实例化Bean

Object beanObj = null;

try {

beanObj = beanClass.newInstance();

//通过方法名封装方法名和属性名

for(Method m : setMethods){

//method name

String mn = m.getName();

//property name

String propertyName = mn.replace("set","").toLowerCase();

 

setMethodNames.add(mn);

propertyNames.add(propertyName);

}

//通过request.getParameter(属性名)获得表单数据

for(String property : propertyNames){

formValues.add(request.getParameter(property));

}

 

//把表单对象属性值转为正确的类型(set方法参数类型)后实例化对象

int index = 0;

for(Method m : setMethods){

String type = m.getParameterTypes()[0].toString();

if(type.indexOf(".")>-1){

type = type.substring(type.lastIndexOf(".")+1);

}

String value = formValues.get(index);

if(value == null || "".equals(value)){

index ++;

continue;

}

//List,自定义类目前不支持赋值

if("String".endsWith(type)){

m.invoke(beanObj,value);

}else if("int".endsWith(type) || "Integer".endsWith(type)){

m.invoke(beanObj, Integer.parseInt(value));

}else if("double".endsWith(type) || "Double".endsWith(type)){

m.invoke(beanObj, Double.parseDouble(value));

}else if("float".endsWith(type) || "Float".endsWith(type)){

m.invoke(beanObj, Float.parseFloat(value));

}

index ++;

}

} catch (InstantiationException e) {

e.printStackTrace();

} catch (IllegalAccessException e) {

e.printStackTrace();

} catch (IllegalArgumentException e) {

e.printStackTrace();

} catch (InvocationTargetException e) {

e.printStackTrace();

}

return (T)beanObj;

}

 

}

java反射 工具类

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
java的反射机制我也是刚刚了解。只能算初学。这里写下这些纯是为了以后查看方便。所以没什么心得,
在正常情况下,必须知道一个类的完整路径之后才可以实例化对象,但是在java中也允许通过一个对象来
java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。静态方法是属于类的,不是属于
JAVA中类文件加载是动态的。JVM指令是被封装在了. class文件里面,而.class文件的加载过程是动态的
JAVA中类文件加载是动态的。JVM指令是被封装在了. class文件里面,而.class文件的加载过程是动态的
反射是对象---->类 在java中,只要给定类的名字, 那么就可以通过反射机制来获得类的所有信息。
JAVA中类文件加载是动态的。JVM指令是被封装在了. class文件里面,而.class文件的加载过程是动态的
认识Class类: 在正常情况下,需要先有一个类的完整路径引入之后才可以按照固定的格式产生实例化对
完整的Person类 package zz.person ; interface China{ // 定义China接口 public static final Stri
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka 摘要:本文主要讲了Java类
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号