Android反射工具类ReflectUtil
16lz
2022-01-22
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博客导航总结,以及个人常用android免费学习干货(文章,视频,矢
- 谷安: 两分钟内呈现 6 小时的 Android(安卓)游戏开发过程… [视
- 硬核干货!系统盘点Android开发者必须掌握的Java知识体系,收藏这一
- android异常 More than one file was found with OS independent
- 解决Android(安卓)Studio Gradle DSL method not found: 'androi
- 感谢国内知名 Android(安卓)开发者 「stormzhang」推荐了我的公
- 【腾讯Bugly干货分享】Android动态布局入门及NinePatchChunk解密
- 【绝对干货】超全Android中高级面试复习大纲,覆盖所有面试知识!(上
- android优化工具