`
- 浏览:
110808 次
- 性别:
- 来自:
合肥
-
- import java.lang.reflect.Field;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.lang.reflect.Modifier;
- import java.lang.reflect.ParameterizedType;
- import java.lang.reflect.Type;
- import java.util.ArrayList;
- import java.util.Collection;
- import java.util.Date;
- import java.util.List;
-
- import org.apache.commons.beanutils.ConvertUtils;
- import org.apache.commons.beanutils.PropertyUtils;
- import org.apache.commons.beanutils.converters.DateConverter;
- import org.apache.commons.lang.StringUtils;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.util.Assert;
-
-
-
-
-
-
-
- public class ReflectionUtils {
-
- private static Logger logger = LoggerFactory.getLogger(ReflectionUtils.class);
-
- static {
- DateConverter dc = new DateConverter();
- dc.setUseLocaleFormat(true);
- dc.setPatterns(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss" });
- ConvertUtils.register(dc, Date.class);
- }
-
-
-
-
- public static Object invokeGetterMethod(Object target, String propertyName) {
- String getterMethodName = "get" + StringUtils.capitalize(propertyName);
- return invokeMethod(target, getterMethodName, new Class[] {}, new Object[] {});
- }
-
-
-
-
- public static void invokeSetterMethod(Object target, String propertyName, Object value) {
- invokeSetterMethod(target, propertyName, value, null);
- }
-
-
-
-
-
-
- public static void invokeSetterMethod(Object target, String propertyName, Object value, Class<?> propertyType) {
- Class<?> type = propertyType != null ? propertyType : value.getClass();
- String setterMethodName = "set" + StringUtils.capitalize(propertyName);
- invokeMethod(target, setterMethodName, new Class[] { type }, new Object[] { value });
- }
-
-
-
-
- public static Object getFieldValue(final Object object, final String fieldName) {
- Field field = getDeclaredField(object, fieldName);
-
- if (field == null) {
- throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
- }
-
- makeAccessible(field);
-
- Object result = null;
- try {
- result = field.get(object);
- } catch (IllegalAccessException e) {
- logger.error("不可能抛出的异常{}", e.getMessage());
- }
- return result;
- }
-
-
-
-
- public static void setFieldValue(final Object object, final String fieldName, final Object value) {
- Field field = getDeclaredField(object, fieldName);
-
- if (field == null) {
- throw new IllegalArgumentException("Could not find field [" + fieldName + "] on target [" + object + "]");
- }
-
- makeAccessible(field);
-
- try {
- field.set(object, value);
- } catch (IllegalAccessException e) {
- logger.error("不可能抛出的异常:{}", e.getMessage());
- }
- }
-
-
-
-
- public static Object invokeMethod(final Object object, final String methodName, final Class<?>[] parameterTypes,
- final Object[] parameters) {
- Method method = getDeclaredMethod(object, methodName, parameterTypes);
- if (method == null) {
- throw new IllegalArgumentException("Could not find method [" + methodName + "] on target [" + object + "]");
- }
-
- method.setAccessible(true);
-
- try {
- return method.invoke(object, parameters);
- } catch (Exception e) {
- throw convertReflectionExceptionToUnchecked(e);
- }
- }
-
-
-
-
-
-
- protected static Field getDeclaredField(final Object object, final String fieldName) {
- Assert.notNull(object, "object不能为空");
- Assert.hasText(fieldName, "fieldName");
- for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass
- .getSuperclass()) {
- try {
- return superClass.getDeclaredField(fieldName);
- } catch (NoSuchFieldException e) {
-
- }
- }
- return null;
- }
-
-
-
-
- protected static void makeAccessible(final Field field) {
- if (!Modifier.isPublic(field.getModifiers()) || !Modifier.isPublic(field.getDeclaringClass().getModifiers())) {
- field.setAccessible(true);
- }
- }
-
-
-
-
-
-
- protected static Method getDeclaredMethod(Object object, String methodName, Class<?>[] parameterTypes) {
- Assert.notNull(object, "object不能为空");
-
- for (Class<?> superClass = object.getClass(); superClass != Object.class; superClass = superClass
- .getSuperclass()) {
- try {
- return superClass.getDeclaredMethod(methodName, parameterTypes);
- } catch (NoSuchMethodException e) {
-
- }
- }
- return null;
- }
-
-
-
-
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static <T> Class<T> getSuperClassGenricType(final Class clazz) {
- return getSuperClassGenricType(clazz, 0);
- }
-
-
-
-
-
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static Class getSuperClassGenricType(final Class clazz, final int index) {
- Type genType = clazz.getGenericSuperclass();
-
- if (!(genType instanceof ParameterizedType)) {
- logger.warn(clazz.getSimpleName() + "'s superclass not ParameterizedType");
- return Object.class;
- }
-
- Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
-
- if (index >= params.length || index < 0) {
- logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s Parameterized Type: "
- + params.length);
- return Object.class;
- }
- if (!(params[index] instanceof Class)) {
- logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
- return Object.class;
- }
-
- return (Class) params[index];
- }
-
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static List convertElementPropertyToList(final Collection collection, final String propertyName) {
- List list = new ArrayList();
-
- try {
- for (Object obj : collection) {
- list.add(PropertyUtils.getProperty(obj, propertyName));
- }
- } catch (Exception e) {
- throw convertReflectionExceptionToUnchecked(e);
- }
-
- return list;
- }
-
-
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static String convertElementPropertyToString(final Collection collection, final String propertyName,
- final String separator) {
- List list = convertElementPropertyToList(collection, propertyName);
- return StringUtils.join(list, separator);
- }
-
-
-
-
-
-
-
- @SuppressWarnings("unchecked")
- public static <T> T convertStringToObject(String value, Class<T> toType) {
- try {
- return (T) ConvertUtils.convert(value, toType);
- } catch (Exception e) {
- throw convertReflectionExceptionToUnchecked(e);
- }
- }
-
-
-
-
- public static RuntimeException convertReflectionExceptionToUnchecked(Exception e) {
- return convertReflectionExceptionToUnchecked(null, e);
- }
-
- public static RuntimeException convertReflectionExceptionToUnchecked(String desc, Exception e) {
- desc = (desc == null) ? "Unexpected Checked Exception." : desc;
- if (e instanceof IllegalAccessException || e instanceof IllegalArgumentException
- || e instanceof NoSuchMethodException) {
- return new IllegalArgumentException(desc, e);
- } else if (e instanceof InvocationTargetException) {
- return new RuntimeException(desc, ((InvocationTargetException) e).getTargetException());
- } else if (e instanceof RuntimeException) {
- return (RuntimeException) e;
- }
- return new RuntimeException(desc, e);
- }
-
- public static final <T> T getNewInstance(Class<T> cls) {
- try {
- return cls.newInstance();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- }
- return null;
- }
- }
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
该工具类下载后拷贝到你要用的包,只需该包名即可
一个Java反射工具类,可以完成查询字段值以及设置字段值的功能。
提供以下几个功能: 1. 取最简类名 2. 动态赋值 3. 动态取值 4. 判断是否普通类型(自定义成员变量) 5. 动态取指定类的所有属性名
ReflectUtil java反射工具类
java 反射工具类,适用于框架开发、平台建设等项目
NULL 博文链接:https://shulinshulinzi.iteye.com/blog/2372372
使用java 反射 将HttpServletRequest 中页面参数动态的注入到 javabean对象的辅助工具类,觉得还不错!
反射技术集合,针对对象的反射操作,包含:判断对象属性是否为空、清空对象、读取设置属性等等,比较实用
java反射,设置属性值,获得属性,具有多个对象同事设置,缓存的处理,
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
java组件开发(13)反射工具类
StringData JPA 反射生成 自定义显示类集合 !!
文件工具类,Http请求工具类,图片处理工具类。Ip工具类。mail工具类,Map工具类,MD5编码工具类,数字工具类,随机数工具类,反射工具类,字符串处理工具类,URL工具类,XML工具类,常用的数据验证工具类
java基础工具类iceroot iceroot是一个java基础工具类.封装了很多有用的方法. 该类库无任何第三方依赖. 涵盖了 字符串操作 时间转化 读取配置文件 等方面. 基础工具类对于java代码的编写是非常必要的,然 而很多...
该代码经过作者的优化,可直接使用,反射一个实体,从试题中获取值
主要为大家详细介绍了java常用工具类,包括Reflect反射工具类、String字符串工具类,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在向学生讲解Class.forName()方法的使用时,有时需要扩展讲解为什么这样书写的原理,于是,扩展讲解Java反射技术可以查看被监视类的方法(构造方法和普通方法)、公有属性的功能,以达到封闭功能的效果。该例子使用...