Mi sono imbattuto in qualcosa che non capisco. Perché il valore di ogni ciclo non è legale quando il secondo è identico?Java Generics e tipi di reso
public interface SomeInterface<T> {
List<SomeNamedObject> getObjects();
void doSomething(P1 p1, T p2);
}
public class SomeNamedObject {
private String text;
}
public class Clazz {
private SomeInterface someInterface;
...
public void someMethod() {
// Error Type mismatch: cannot convert from element type Object to TestClass.SomeNamedObject
for (SomeNamedObject someNamedObject : someInterface.getObjects()) {
// This loop won't compile as the someInterface.getObjects returns just a List and not a List<SomeNamedObject>
}
// Warning Type safety: The expression of type List needs unchecked
// conversion to conform to List<TestClass.SomeNamedObject>
List<SomeNamedObject> objects = someInterface.getObjects();
for (SomeNamedObject someNamedObject : objects) {
// This loop compiles
}
}
}
Non è un bug, è un problema con la cancellazione e i tipi non elaborati. – Stefan
Non vedo quale potrebbe essere il problema. Puoi pubblicare la traccia dello stack reale (solo le prime righe). Immagino che la tua classe completa richieda "SomeInterface", ma l'esempio non richiede "" Forse c'è qualcosa in là? –
Jay
@Jay la sua dichiarazione di someInterface non specifica il tipo generico, Java quindi ricade sui tipi non elaborati e le modifiche alla firma del metodo per restituire un elenco non elaborato (vedere le risposte). Avrebbe dovuto menzionare l'avvertimento sull'assegnazione degli oggetti. – Stefan