Android反射工具類

import android.content.SharedPreferences; import android.text.TextUtils; import java.lang.reflect.Field; import java.lang.reflect.Method; /** * @author Afra55 * @date 2018/4/2 * A smile is the best business card. * <p> * 反射工具類 * 通過反射獲得對應函數功能 */ public class ReflectionUtil { /** * 通過類對象,運行指定方法 * * @param obj 類對象 * @param methodName 方法名 * @param params 參數值 * @return 失敗返回null */ public static Object invokeMethod(Object obj, String methodName, Object[] params) { if (obj == null || TextUtils.isEmpty(methodName)) { return null; } Class<?> clazz = obj.getClass(); try { Class<?>[] paramTypes = null; if (params != null) { paramTypes = new Class[params.length]; for (int i = 0; i < params.length; ++i) { paramTypes[i] = params[i].getClass(); } } Method method = clazz.getMethod(methodName, paramTypes); method.setAccessible(true); return method.invoke(obj, params); } catch (NoSuchMethodException e) { } catch (Exception e) { e.printStackTrace(); } return null; } /** * 通過類對象,運行指定方法 * * @param obj 類對象 * @param methodName 方法名 * @param params 參數值 * @return 失敗返回null */ public static Object invokeDeclaredMethod(Object obj, String methodName, Object[] params) { if (obj == null || TextUtils.isEmpty(methodName)) { return null; } Class<?> clazz = obj.getClass(); try { Class<?>[] paramTypes = null; if (params != null) { paramTypes = new Class[params.length]; for (int i = 0; i < params.length; ++i) { paramTypes[i] = params[i].getClass(); } } Method method = clazz.getDeclaredMethod(methodName, paramTypes); method.setAccessible(true); return method.invoke(obj, params); } catch (NoSuchMethodException e) { } catch (Exception e) { e.printStackTrace(); } return null; } public static Object getFieldValue(Object obj, String fieldName) { if (obj == null || TextUtils.isEmpty(fieldName)) { return null; } Class<?> clazz = obj.getClass(); while (clazz != Object.class) { try { Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); return field.get(obj); } catch (Exception e) { } clazz = clazz.getSuperclass(); } return null; } public static void setFieldValue(Object obj, String fieldName, Object value) { if (obj == null || TextUtils.isEmpty(fieldName)) { return; } Class<?> clazz = obj.getClass(); while (clazz != Object.class) { try { Field field = clazz.getDeclaredField(fieldName); field.setAccessible(true); field.set(obj, value); return; } catch (Exception e) { } clazz = clazz.getSuperclass(); } } /** * 通過類全路徑,運行指定靜態方法 * * @param obj 類全路徑 * @param methodName 方法名 * @param params 參數值 * @return 失敗返回null */ public static Object invokeStaticMethod(String obj, String methodName, Object[] params, Class<?>... parameterTypes) { if (obj == null || TextUtils.isEmpty(methodName)) { return null; } try { Class<?> clazz = Class.forName(obj); Method method = clazz.getMethod(methodName, parameterTypes); method.setAccessible(true); return method.invoke(null, params); } catch (NoSuchMethodException e) { } catch (Exception e) { e.printStackTrace(); } return null; } public static SharedPreferences invokeSp(String name) { try { return (SharedPreferences) ReflectionUtil.invokeStaticMethod("com.sp.cons.SpConsForKernel", "getSp", new Object[]{name}, String.class); } catch (Exception e) { e.printStackTrace(); } return null; } }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章