a List then Perché il codice (sotto) viene compilato? Sicuramente MyClass2
dovrebbe restituire un List<Integer>
?Perché questa classe viene compilata anche se non implementa correttamente la sua interfaccia?
public class Main {
public static void main(final String[] args) {
MyClass myClass = new MyClass();
List list = myClass.getList();
System.out.println(list);
System.out.println(list.get(0).getClass());
MyClass2 myClass2 = new MyClass2();
List list2 = myClass2.getList();
System.out.println(list2);
System.out.println(list2.get(0).getClass());
}
public interface Int1 {
public List getList();
}
public interface Int2 extends Int1 {
@Override
public List<Integer> getList();
}
public static class MyClass implements Int2 {
@Override
public List<Integer> getList() {
return Arrays.asList(1, 2, 3);
}
}
public static class MyClass2 implements Int2 {
@Override
public List getList() {
return Arrays.asList("One", "Two", "Three");
}
}
}
ho notato se si tenta di renderlo un List<String>
poi si ottiene un errore "java: Main.MyClass2 non è astratta e non sovrascrive metodo astratto getList() in Main.Int2". Non capisco perché non capisci questo nell'esempio sopra.
Nota: la soluzione al problema nel mio progetto è rendere l'interfaccia stessa generica, ad esempio Int1<X>
(ovviamente uso nomi migliori di questo, è solo un esempio).
Generalmente si dovrebbero avere avvertenze nell'output del compilatore – fge
Perché Java Generics fa schifo. – schlingel