diff options
Diffstat (limited to 'android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ReflectHelper.java')
-rw-r--r-- | android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ReflectHelper.java | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ReflectHelper.java b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ReflectHelper.java new file mode 100644 index 0000000000..c1b22859c6 --- /dev/null +++ b/android/3rd_party/HoloEverywhere/library/src/org/holoeverywhere/util/ReflectHelper.java @@ -0,0 +1,38 @@ + +package org.holoeverywhere.util; + +import java.lang.reflect.Method; + +public final class ReflectHelper { + + private static Class<?>[] classess(Object[] args) { + Class<?>[] result = new Class<?>[args.length]; + for (int i = 0; i < args.length; i++) { + Object z = args[i]; + if (z != null) { + result[i] = z.getClass(); + } + } + return result; + } + + public static <Result> Result invoke(Object object, String methodName, + Class<Result> result, boolean superClass, Object... args) { + try { + Class<?>[] argsClasses = ReflectHelper.classess(args); + Method method = (superClass ? object.getClass().getSuperclass() + : object.getClass()).getMethod(methodName, argsClasses); + method.setAccessible(true); + Object r = method.invoke(object, args); + return result != null ? result.cast(r) : null; + } catch (Exception e) { + return null; + } + } + + public static <Result> Result invoke(Object object, String methodName, + Class<Result> result, Object... args) { + return ReflectHelper.invoke(object, methodName, result, false, args); + } + +} |