Comment déclarer une classe typée en Java? [dupliquer]
Cette question a déjà une réponse ici:
je dois déclarer une instance de Map.class
, mais la Carte est tapé... J'ai donc besoin de quelque chose comme ceci:
Class <Map<String, String>> clazz = Map.class;
Cette ligne provoque une erreur de compilation. Quelle est la manière propre d'exprimer cela?
3 réponses
Vous pouvez le faire avec des moulages.
Class<Map<String, String>> clazz = (Class<Map<String, String>>) (Object) Map.class;
cela génère un avertissement mais compile.
le problème avec cela est qu'en raison de l'effacement de type, l'objet résultant à l'exécution n'est pas différent de Map.class
(il ne connaît pas le type).
Si vous avez besoin d'un objet qui représente vraiment Map<String, String>
vous pouvez chercher à utiliser java.lang.reflect.Type
ou Goyave TypeToken
.
import java.util.*;
public class Test{
public static void main(String [] args){
Class <Map> clazz = Map.class;
System.out.println(clazz);
}
}
interface java.util.Map
Map<String, String> clazz = new HashMap<String, String>()
rappelez-vous que Map est une interface, non instanciable directement mais uniquement via une classe l'implémentant, comme HashMap
ou TreeMap