Попробуйте class.forName(String)
, например, что-то вроде
Class.forName("my.package.name.ClassPrefix" + name)
Также убедитесь, что вы позаботились о правильной обработке исключений.
Обновление : Вот полный MCVE в качестве доказательства концепции, который также показывает, как создать экземпляр класса с помощью API отражения. Но в этом случае вам нужно убедиться, что у каждого целевого класса есть конструктор по умолчанию (без аргументов).
package de.scrum_master.app;
public interface MyInterface {}
package de.scrum_master.app;
public class Foo implements MyInterface {}
package de.scrum_master.app;
public class Bar implements MyInterface {}
package de.scrum_master.app;
public class Zot implements MyInterface {}
package de.scrum_master.app;
public class UhOh /*implements MyInterface*/ {}
package de.scrum_master.app;
public class Application {
public static void main(String[] argv) throws Exception {
System.out.println(makeInstanceByName("Foo"));
System.out.println(makeInstanceByName("Bar"));
System.out.println(makeInstanceByName("Zot"));
System.out.println(makeInstanceByName("UhOh"));
}
public static MyInterface makeInstanceByName(String name) throws Exception {
return
(MyInterface) Class.forName("de.scrum_master.app." + name)
.getConstructor()
.newInstance();
}
}
Журнал консоли:
de.scrum_master.app.Foo@6d06d69c
de.scrum_master.app.Bar@7852e922
de.scrum_master.app.Zot@4e25154f
Exception in thread "main" java.lang.ClassCastException: de.scrum_master.app.UhOh cannot be cast to de.scrum_master.app.MyInterface
at de.scrum_master.app.Application.makeInstanceByName(Application.java:15)
at de.scrum_master.app.Application.main(Application.java:8)