Я никогда не пробовал это с динамически генерируемых/скомпилированных классов, но ...
Попробуйте использовать Class.forName ("com.example.YourClassName"), чтобы получить ссылку на класс:
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#forName(java.lang.String)
, а затем использовать Class.newInstance() для создания экземпляра класса:
http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#newInstance()
Для этого, чтобы работать, com.example.YourClassName должен быть видимым для загрузчика классов.
Например:
Class clazz = Class.forName("com.example.YourClassName");
Object instance = clazz.newInstance();
newInstance() вызов будет работать только если ваш класс имеет конструктор без аргументов.
Если конструктор класса YourClassName требует аргументов, вы должны использовать несколько иной метод для вызова конкретного конструктора и передачи ему значений. Например, если у вас есть конструктор, как это:
YourClassName (Integer someInt, String SomeString)
Тогда вы могли бы сделать это, чтобы создать экземпляр YourClassName с помощью этого конструктора:
Class clazz = Class.forName("com.example.YourClassName");
Constructor constructor = clazz.getConstructor(Integer.class, String.class);
Object instance = constructor.newInstance(anInteger, "aString");
Это, вероятно, поможет если каждый экземпляр YourClassName реализовал тот же interface или расширил тот же базовый класс, чтобы вы могли применить возвращаемое значение newInstance() к этому интерфейсу или базовому классу. Затем вы сможете вызвать методы интерфейса или базового класса в экземпляре. В противном случае ваш единственный способ вызвать полезные методы для объекта будет use reflection.
Кажется, что вы ищете [отражение] (https://docs.oracle.com/javase/tutorial/reflect/). – Seelenvirtuose