Android反射工具类ReflectUtil

public class ReflectUtil {

    public static Object getField(String clazzName, Object target, String name) throws Exception {
        return getField(Class.forName(clazzName), target, name);
    }

    public static Object getField(Class clazz, Object target, String name) throws Exception {
        Field field = clazz.getDeclaredField(name);
        field.setAccessible(true);
        return field.get(target);
    }

    public static Object getFieldNoException(String clazzName, Object target, String name) {
        try {
            return getFieldNoException(Class.forName(clazzName), target, name);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static Object getFieldNoException(Class clazz, Object target, String name) {
        try {
            return ReflectUtil.getField(clazz, target, name);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void setField(String clazzName, Object target, String name, Object value) throws Exception {
        setField(Class.forName(clazzName), target, name, value);
    }

    public static void setField(Class clazz, Object target, String name, Object value) throws Exception {
        Field field = clazz.getDeclaredField(name);
        field.setAccessible(true);
        field.set(target, value);
    }

    public static void setFieldNoException(String clazzName, Object target, String name, Object value) {
        try {
            setFieldNoException(Class.forName(clazzName), target, name, value);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void setFieldNoException(Class clazz, Object target, String name, Object value) {
        try {
            ReflectUtil.setField(clazz, target, name, value);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Object invoke(String clazzName, Object target, String name, Object... args)
            throws Exception {
       return invoke(Class.forName(clazzName), target, name, args);
    }

    @SuppressWarnings("unchecked")
    public static Object invoke(Class clazz, Object target, String name, Object... args)
            throws Exception {
        Class[] parameterTypes = null;
        if (args != null) {
            parameterTypes = new Class[args.length];
            for (int i = 0; i < args.length; i++) {
                parameterTypes[i] = args[i].getClass();
            }
        }

        Method method = clazz.getDeclaredMethod(name, parameterTypes);
        method.setAccessible(true);
        return method.invoke(target, args);
    }

    public static Object invoke(String clazzName, Object target, String name, Class[] parameterTypes, Object... args)
            throws Exception {
        return invoke(Class.forName(clazzName), target, name, parameterTypes, args);
    }

    @SuppressWarnings("unchecked")
    public static Object invoke(Class clazz, Object target, String name, Class[] parameterTypes, Object... args)
            throws Exception {
        Method method = clazz.getDeclaredMethod(name, parameterTypes);
        method.setAccessible(true);
        return method.invoke(target, args);
    }

    public static Object invokeNoException(String clazzName, Object target, String name, Class[] parameterTypes, Object... args) {
        try {
            return invokeNoException(Class.forName(clazzName), target, name, parameterTypes, args);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;
    }

    @SuppressWarnings("unchecked")
    public static Object invokeNoException(Class clazz, Object target, String name, Class[] parameterTypes, Object... args) {
        try {
            return invoke(clazz, target, name, parameterTypes, args);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }
}

欢迎关注微信公众号:DroidMind
精品内容独家发布平台


呈现与博客不一样的技术干货

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
反射是 Java 中一个非常重要的特性,它可以帮助我们在程序运行时动态地获取类的信息,并且可以操作类的属性、方法和构造函数等。下面是一个简单的反射工具类: ```java import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; public class ReflectUtil { // 获取类的构造函数 public static Constructor<?> getConstructor(Class<?> clazz, Class<?>... parameterTypes) throws NoSuchMethodException { return clazz.getConstructor(parameterTypes); } // 获取类的属性 public static Field getField(Class<?> clazz, String fieldName) throws NoSuchFieldException { return clazz.getDeclaredField(fieldName); } // 获取类的方法 public static Method getMethod(Class<?> clazz, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException { return clazz.getDeclaredMethod(methodName, parameterTypes); } // 创建对象 public static Object newInstance(Class<?> clazz) throws IllegalAccessException, InstantiationException { return clazz.newInstance(); } // 调用方法 public static Object invokeMethod(Method method, Object obj, Object... args) throws Exception { return method.invoke(obj, args); } // 设置属性值 public static void setFieldValue(Field field, Object obj, Object value) throws IllegalAccessException { field.setAccessible(true); field.set(obj, value); } // 获取属性值 public static Object getFieldValue(Field field, Object obj) throws IllegalAccessException { field.setAccessible(true); return field.get(obj); } } ``` 这个工具类提供了以下几个方法: - `getConstructor`:获取类的构造函数; - `getField`:获取类的属性; - `getMethod`:获取类的方法; - `newInstance`:创建类的实例; - `invokeMethod`:调用类的方法; - `setFieldValue`:设置类的属性值; - `getFieldValue`:获取类的属性值。 这些方法可以帮助我们在程序运行时动态地获取和操作类的信息,非常方便。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值