/** * Returns the {@link Class} object for the generated class, creating it if it does not exist * * @return the generated class */ @SuppressWarnings("unchecked") public Class<? extends T> defineClass() { if (generatedClass == null) { synchronized (this) { if (generatedClass == null) { try { // first check that the proxy has not already been created generatedClass = (Class<? extends T>) classLoader.loadClass(this.className); } catch (ClassNotFoundException e) { buildClassDefinition(); if (protectionDomain == null) { generatedClass = (Class<? extends T>) classFile.define(classLoader); } else { generatedClass = (Class<? extends T>) classFile.define(classLoader, protectionDomain); } afterClassLoad(generatedClass); } classFile = null; } } } return generatedClass; }