Oui, quelque chose comme :
Class<?> clazz = Class.forName(className);
Constructor<?> ctor = clazz.getConstructor(String.class);
Object object = ctor.newInstance(new Object[] { ctorArgument });
Cela ne fonctionnera bien sûr que pour un seul paramètre de type chaîne, mais vous pouvez le modifier assez facilement.
Notez que le nom de la classe doit être entièrement qualifié, c'est-à-dire qu'il doit inclure l'espace de noms. Pour les classes imbriquées, vous devez utiliser un dollar (car c'est ce que le compilateur utilise). Par exemple :
package foo;
public class Outer
{
public static class Nested {}
}
Pour obtenir le Class
pour cela, il faut Class.forName("foo.Outer$Nested")
.