Note: purement par curiosité et non pour un cas d'utilisation réel.comment déclarer Class.class avec des génériques valides
Je me demande s'il y a un moyen de déclarer l'objet Class
Class
avec des paramètres de type valides:
Class cc1 = Class.class; //raw type
Class<Class> cc2 = Class.class; //now parameter is raw type
Class<Class<?>> cc3 = Class.class; //compile error: inconvertible types
Si Class
et Class<?>
sont interchangeables, pourquoi sont Class<Class>
et Class<Class<?>>
pas?
EDIT: la question peut être généralisée à un problème de paramètres de type brut imbriqués. Par exemple:
ArrayList<ArrayList<?>> lst = new ArrayList<ArrayList>(); //same compile error
EDIT2: je devrais reformuler la question un peu: je sais que
Class<?> c = Class.class;
est valide, mais je me demande pourquoi Class<Class>
n'est pas la même chose que Class<Class<?>>
Les réponses ci-dessus ont donné des explications détaillées sur les génériques/caractères génériques, mais celui-ci est le plus proche de ce que je demandais, c'est pourquoi la classe n'est pas la même que la classe >. Merci à tous –