Pourquoi le compilateur Java se plaint-il d'utiliser Foreach avec un type brut? [dupliquer

StackOverflow https://stackoverflow.com/questions/5436656

Question

J'ai obtenu une étrange erreur de compilateur lors de l'utilisation de génériques dans une boucle for-out en Java. Est-ce un bug de compilateur Java, ou est-ce que je manque vraiment quelque chose ici?

Voici toute ma classe:

public class Generics<T extends Object> {
  public Generics(T myObject){
    // I didn't really need myObject
  }

  public List<String> getList(){
    List<String> list = new ArrayList<String>();
    list.add("w00t StackOverflow");
    return list;
  }

  public static void main(String...a){
    Generics generics = new Generics(new Object());
    for(String s : generics.getList()){
      System.out.println(s);
    }
  }
}

Le compilateur se plaint de la ligne avec le For-Eenh: "Type Mismatch ne peut pas se convertir de l'objet de type élément en chaîne."
Si je fais ce changement subtil, il compile:

public static void main(String...a){
  Generics<?> generics = new Generics(new Object());
  for(String s : generics.getList()){
    System.out.println(s);
  }
}

je sais getList() utilise des génériques, mais il les utilise dans ce que je pensais être une manière complètement indépendante. Je pourrais comprendre cela si j'essayais d'itérer sur quelque chose de type T et getList() retourné un List<T> Ou quelque chose, mais ce n'est pas le cas ici. Le type de retour de getList() Ne devrait avoir rien à voir avec T et ne devrait pas se soucier de savoir si j'utilise le type brut pour mon objet générique ou non ... non? Cela ne devrait-il pas être complètement indépendant, ou est-ce que je manque vraiment quelque chose ici?

Notez que le code compile également si je fais cela, ce qui, selon moi, aurait dû être également équivalent au premier:

public static void main(String...a){
  Generics generics = new Generics(new Object());
  List<String> list = generics.getList();
  for(String s : list){
    System.out.println(s);
  }
}

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top