`
- 浏览:
115224 次
- 性别:
- 来自:
合肥
-
- 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反射工具类,可以完成查询字段值以及设置字段值的功能。
Java反射工具类主要指的是`java.lang.reflect`包中的类,它们提供了对类、接口、字段和方法的动态访问能力。这篇博文通过链接可能详细解释了如何利用这些工具类来实现一些高级功能。 1. `Class<?>`: 这是反射的核心...
ReflectUtil java反射工具类
这个“Java反射调用工具类”可能是为了简化和封装这些复杂的反射操作而创建的一个实用工具类。 首先,`JobProxy.java`可能是一个代理类,它利用反射来动态地调用目标对象的方法。在Java中,代理模式通常用于在不...
java 反射工具类,适用于框架开发、平台建设等项目
反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被AOP过的真实类等工具函数.反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class, 被...
Java反射机制是Java编程语言中的一个强大特性,它允许程序在运行时检查和操作类、接口、字段和方法的信息。这个特性使得Java具备了高度的灵活性,能够在运行时动态地发现和使用类的属性和方法,即使这些信息在编译时...
使用java 反射 将HttpServletRequest 中页面参数动态的注入到 javabean对象的辅助工具类,觉得还不错!
反射技术集合,针对对象的反射操作,包含:判断对象属性是否为空、清空对象、读取设置属性等等,比较实用
java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具类. 提供调用getter/setter方法, 访问私有变量, 调用私有方法, 获取泛型类型Class,java * 反射工具...
进行数据库查询操作经常用到,包括getDeclaredField、getDeclaredMethod、getFieldValue、getSuperClassGenricType、getSuperGenericType、invokeMethod、makeAccessible、setFieldValue
java组件开发(13)反射工具类
6. **反射API**:Java反射机制允许程序在运行时动态地获取类的信息(如类名、方法名)并调用它们,这在配置文件驱动的应用、插件系统和单元测试中十分有用。 7. **异常处理**:`Exception`类及其子类构成了Java的...
JavaUtils工具类是Java开发中常见的一类辅助代码集合,它们通常包含各种静态方法,用于简化常见的编程任务,提高开发效率。这篇博文链接(已提供但无法直接访问)可能详细探讨了JavaUtils工具类的设计原则、常用方法...
3. **Apache Commons Lang**:Apache软件基金会的一个开源项目,提供了大量扩展Java语言特性的工具类,如字符串处理、数组操作、反射、枚举操作等。 - `StringUtils`:提供了丰富的字符串操作方法,如空白字符处理...
"java常用工具类"这个主题涵盖了Java开发中常用的类和方法,这些工具类可以帮助我们简化编程工作,提高代码的可读性和可维护性。在Java中,`java.util`包就是这样一个包含大量工具类的包,提供了很多实用的功能。 1...