112 votes

comment instanceof List<MyType> ?

Comment puis-je faire fonctionner ce genre de chose? Je peux vérifier si (obj instanceof List<?>) mais pas si (obj instanceof List<MyType>) . Y a-t-il un moyen de le faire?

57voto

Martijn Courteaux Points 33836

Ce n'est pas possible car le type de données s'efface au moment de la compilation des génériques. La seule façon possible de le faire est d'écrire une sorte de wrapper qui contient le type de la liste :

 public class GenericList <T> extends ArrayList<T>
{
     private Class<T> genericType;

     public GenericList(Class<T> c)
     {
          this.genericType = c;
     }

     public Class<T> getGenericType()
     {
          return genericType;
     }
}

55voto

Sats Points 753
if(!myList.isEmpty() && myList.get(0) instanceof MyType){
    // MyType object
}

10voto

Ivo Stoyanov Points 91

Cela peut être utilisé si vous voulez vérifier que object est une instance de List<T> , qui n'est pas vide :

 if(object instanceof List){
    if(((List)object).size()>0 && (((List)object).get(0) instanceof MyObject)){
        // The object is of List<MyObject> and is not empty. Do something with it.
    }
}

9voto

evanwong Points 2394

Vous devrez probablement utiliser la réflexion pour en vérifier les types. Pour obtenir le type de la liste : Obtenir le type générique de java.util.List

5voto

dlaagniechy Points 71
    if (list instanceof List && ((List) list).stream()
                                             .noneMatch((o -> !(o instanceof MyType)))) {}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X