static Map nuEmptyObject_cache = newDangerousWeakHashMap(); static A nuEmptyObject(Class c) ctex { Constructor ctr; synchronized(nuEmptyObject_cache) { ctr = nuEmptyObject_cache.get(c); if (ctr == null) { nuEmptyObject_cache.put(c, ctr = nuEmptyObject_findConstructor(c)); makeAccessible(ctr); } } try { ret (A) ctr.newInstance(); } catch (InstantiationException e) { if (empty(e.getMessage())) if ((c.getModifiers() & Modifier.ABSTRACT) != 0) fail("Can't instantiate abstract class " + className(c), e); else fail("Can't instantiate " + className(c), e); else throw rethrow(e); } } static Constructor nuEmptyObject_findConstructor(Class c) { for (Constructor m : getDeclaredConstructors_cached(c)) if (m.getParameterTypes().length == 0) ret m; fail("No default constructor declared in " + c.getName()); }