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?

8
demandé sur Martin 2015-10-29 13:24:19

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.

4
répondu Paul Boddington 2015-10-29 10:49:44
import java.util.*;

public class Test{
  public static void main(String [] args){
   Class <Map> clazz = Map.class;
   System.out.println(clazz);
  }
}

print

interface java.util.Map

2
répondu Tahar Bakir 2015-10-29 10:31:31
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

0
répondu morels 2015-10-29 10:31:08