Je voudrais créer une instance d'une classe spécifiée en utilisant son nom. Mon code est montré ci-dessous.Génériques et Class.forName
Je reçois un avertissement de compilateur. Est-ce que je fais cela de la bonne façon? Est-il même possible d'utiliser le nom d'une classe et de récupérer une instance de ce type, car je ne pense pas que le compilateur puisse connaître le type de ce type?
public static <T> T create(final String className) {
try {
final Class<?> clazz = Class.forName(className);
//WARNING: Type safety: Unchecked cast from capture#2-of ? to T
return (T) create(clazz);
}
catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static <T> T create(final Class<T> classToCreate) {
final Constructor<T> constructor;
try {
constructor = classToCreate.getDeclaredConstructor();
final T result = constructor.newInstance();
return result;
}
catch (Exception e) {
e.printStackTrace();
}
}
Merci
Eh oui, cela est aussi proche que vous pouvez obtenir avec Java. Pour ce qui est de la création de l'Object, il reste encore quelques trucs à faire, mais je ne vais pas entrer dans les détails car ces trucs sont implémentés dans ma classe d'utilitaires que je prévois de lancer dès que je découvre canal pour le diffuser parmi tous les programmeurs Java là-bas. – Esko
@Esko, considérez le code Google (pour les versions publiées) et/ou avec Github (pour le code réel) –
Vous devez ajouter un cast pour le compiler 'final Classe clazz = (Classe ) Class.forName (className). asSubclass (ifaceClass); ' –