package codeine.utils; import java.lang.reflect.Field; import org.apache.log4j.Logger; public class ReflectionUtils { private static final Logger log = Logger.getLogger(ReflectionUtils.class); public static <T> T newInstance(Class<T> clazz) { try { return clazz.newInstance(); } catch (InstantiationException | IllegalAccessException e) { throw ExceptionUtils.asUnchecked(e); } } @SuppressWarnings("unchecked") public static <T> T getFieldValue(Object obj, String sFieldName) { Field field = getField(obj, sFieldName); try { return (T) field.get(obj); } catch (IllegalArgumentException ex) { throw ExceptionUtils.asUnchecked(ex); } catch (IllegalAccessException ex) { throw ExceptionUtils.asUnchecked(ex); } } static private Field getField(Object obj, String sFieldName) { Class<?> c = obj.getClass(); return getFieldForClass(c, sFieldName); } static private Field getFieldForClass(Class<?> c, String sFieldName) { log.debug("getFieldForClass() - called with c.getName() = " + c.getName()); try { Field field = c.getDeclaredField(sFieldName); field.setAccessible(true); return field; } catch (NoSuchFieldException e) { log.debug("getFieldForClass() - not found, will try in superclass"); // check super if (null == c.getSuperclass()) { throw ExceptionUtils.asUnchecked(e); } return getFieldForClass(c.getSuperclass(), sFieldName); } } }