/** Random reflection-related utilities */
public final class Reflection {
-
- private static Object rebuild(Object o, Class c) {
+
+ public static Object rebuild(Object o, Class c) {
//System.out.println("rebuild " + o + " (a " + (o==null?null:o.getClass().getName()) + ") " + c);
if (o==null || c.isAssignableFrom(o.getClass())) return o;
if ((c == Character.class || c == Character.TYPE) && o instanceof String && ((String)o).length()==1) return new Character(((String)o).charAt(0));
Object[] ret = (Object[])Array.newInstance(c.getComponentType(), 1);
ret[0] = o;
return ret;
+ } else if (c==int.class && o instanceof Number) { return o;
} else {
throw new Error("unable to cast " + o + " from " + o.getClass().getName() + " to " + c.getName());
}
return o+"";
}
+ public static boolean isConcrete(Class c) {
+ if ((c.getModifiers() & Modifier.ABSTRACT) != 0) return false;
+ if ((c.getModifiers() & Modifier.INTERFACE) != 0) return false;
+ return true;
+ }
+ public static boolean isStatic(Field f) {
+ if ((f.getModifiers() & Modifier.STATIC) != 0) return true;
+ return false;
+ }
+
+ public static Field getField(Class c, String s) {
+ try {
+ for(Field f : c.getDeclaredFields())
+ if (f.getName().equals(s))
+ return f;
+ } catch (Exception e) { }
+ if (c.getSuperclass()==null || c.getSuperclass()==c) return null;
+ return getField(c.getSuperclass(), s);
+ }
+ public static Field getField(Class c, int i) {
+ try {
+ for(Field f : c.getDeclaredFields()) {
+ if (isStatic(f)) continue;
+ return f;
+ }
+ if (c.getSuperclass()==null || c.getSuperclass()==c) return null;
+ return getField(c.getSuperclass(), i);
+ } catch (Exception e) { }
+ return null;
+ }
+
}