Android反射工具类ReflectUtil
16lz
2021-01-23
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; }}
更多相关文章
- 硬核干货!系统盘点Android开发者必须掌握的Java知识体系,收藏这一
- 感谢国内知名 Android 开发者 「stormzhang」推荐了我的公众号
- 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密
- 干货文章整理(建议有时间多看几遍)
- 我想给你们介绍一个与众不同的Android微信公众号
- Git点赞82K!字节跳动保姆级Android学习指南,干货满满
- 干货必读丨Android APK反编译
- Android TimeUtile日期处理工具类(干货)
- Android开发干货大全(持续更新)