package pl.shockah; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method; @SuppressWarnings("unchecked") public class Reflection { public static Field getPrivateField(Class<?> cls, String fieldName) { try { Field field = cls.getDeclaredField(fieldName); field.setAccessible(true); return field; } catch (Exception e) {e.printStackTrace();} return null; } public static void setField(Field field, Object instance, Object value) { try { field.set(instance,value); } catch (Exception e) {e.printStackTrace();} } public static <T> void setPrivateValue(Class<? super T> cls, String fieldName, T instance, Object value) { try { getPrivateField(cls,fieldName).set(instance,value); } catch (Exception e) {e.printStackTrace();} } public static <T> T getPrivateValue(Class<?> cls, String fieldName, Object instance) { try { return (T)getPrivateField(cls,fieldName).get(instance); } catch (Exception e) {e.printStackTrace();} return null; } public static Method getPrivateMethod(Class<?> cls, String methodName, Class<?>... argumentTypes) { try { Method method = cls.getDeclaredMethod(methodName,argumentTypes); method.setAccessible(true); return method; } catch (Exception e) {e.printStackTrace();} return null; } public static <T> T invokeMethod(Method method, Object instance, Object... arguments) { try { return (T)method.invoke(instance,arguments); } catch (Exception e) {e.printStackTrace();} return null; } public static <T> Constructor<T> getConstructor(Class<T> cls, Class<?>... argumentTypes) { try { Constructor<T> constructor = cls.getConstructor(argumentTypes); constructor.setAccessible(true); return constructor; } catch (Exception e) {e.printStackTrace();} return null; } public static <T> T newInstance(Constructor<T> ctr, Object... argumentTypes) { try { return ctr.newInstance(argumentTypes); } catch (Exception e) {e.printStackTrace();} return null; } public static <T> T newInstance(Class<T> cls) { try { return cls.newInstance(); } catch (Exception e) {e.printStackTrace();} return null; } }