puis-je instancier de manière réfléchie un type générique dans Java?

Est-il possible de reflectively instancier un type générique en Java? À l'aide de la technique décrite ici j'obtiens une erreur parce que la classe jetons ne peuvent pas être générique. Prenons l'exemple ci-dessous. Je veux instancier certains sous-classe de Créateur qui implémente Créateur. Le nom de la classe réelle est passé en argument de ligne de commande. L'idée est d'être capable de spécifier une mise en œuvre du Créateur au moment de l'exécution. Est-il une autre façon d'accomplir ce que je suis en train de faire ici?

public interface Creator<T> {
    T create();
}
public class StringCreator implements Creator<String> {
    public String create() { return new String(); }
}
public class FancyStringCreator implements Creator<String> {
    public String create() { return new StringBuffer().toString(); }
}
public static void main(String[] args) throws Exception {
    Class<?> someClass = Class.forName(args[0]);
    /*ERROR*/Class<? extends Creator<String>> creatorClass = someClass.asSubclass(Creator.class);
    Constructor<? extends Creator<String>> creatorCtor = creatorClass.getConstructor((Class<?>[]) null);
    Creator<String> creator = creatorCtor.newInstance((Object[]) null);
}

Edit: j'aime Marcus' approche la plus simple et pragmatique, et ce sans contourner l'ensemble des génériques chose. Je peux l'utiliser dans ma situation parce que je peux préciser que la classe a réussi doit être une sous-classe de StringCreator. Mais comme Ericsson, a souligné le générique de l'information est encore là, au niveau du type, tout simplement pas au niveau d'exécution de sorte qu'il est encore possible de reflectively examiner si une classe implémente le bon type générique.

source d'informationauteur sk.