Domanda

Ho ricevuto uno strano errore del compilatore quando ho usato i generici all'interno di un ciclo per Java. È un bug del compilatore Java o mi manca davvero qualcosa qui?

Ecco tutta la mia 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);
    }
  }
}

Il compilatore si lamenta della linea con la per l'eact: "Il tipo di mancata corrispondenza non può convertire dall'oggetto tipo elemento in stringa".
Se apro questa sottile modifica, compila:

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

lo so getList() Usa i generici, ma li usa in quello che pensavo fosse un modo completamente non correlato. Potrei capirlo se stavo cercando di iterare su qualcosa di tipo T e getList() restituito a List<T> O qualcosa del genere, ma non è così. Il tipo di ritorno di getList() Non dovrebbe avere assolutamente nulla a che fare con T e non dovrei preoccuparmi se uso il tipo grezzo per il mio oggetto generico o no ... giusto? Non dovrebbero essere completamente non correlati o mi manca davvero qualcosa qui?

Si noti che il codice si compila anche se lo faccio, che pensavo avrebbe dovuto essere equivalente anche al primo:

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);
  }
}

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top