public C forName(String name) throws ClassNotFoundException { C result = cache.get(name); if (result != null) { if (result == nullValue) throw CACHED_EXCEPTION; return result; } try { result = forName(classNameUtil.normalizeClassName(name), classLoader); cache.put(name, result); return result; } catch(ClassNotFoundException e) { cache.put(name, nullValue); throw e; } }