a Liste dann Warum kompiliert der Code (unten)? Sicher MyClass2
sollte eine List<Integer>
zurückgeben?Warum kompiliert diese Klasse, obwohl sie ihre Schnittstelle nicht richtig implementiert?
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");
}
}
}
ich bemerkt, wenn Sie versuchen, es zu machen, ein List<String>
dann erhalten Sie einen Fehler „java: Main.MyClass2 nicht abstrakt ist und überschreibt nicht abstrakte Methode getList() in Main.Int2“. Ich verstehe nicht ganz, warum Sie das im obigen Beispiel nicht verstehen.
Hinweis: Die Lösung für das Problem in meinem Projekt ist, die Schnittstelle selbst generisch zu machen, d. H. Int1<X>
(natürlich verwende ich bessere Namen als dies, es ist nur ein Beispiel).
Sie sollten normalerweise Warnungen in Ihrem Compiler-Ausgang haben – fge
Weil Java Generics saugen. – schlingel