a List then なぜコード (以下) がコンパイルされるのですか? 確かに? MyClass2
を返す必要があります。List<Integer>
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");
}
}
}
にしようとすると、List<String>
「java: Main.MyClass2 は抽象的ではなく、Main.Int2 の抽象メソッド getList() をオーバーライドしません」というエラーが表示されることに気付きました。上記の例でこれが得られない理由がよくわかりません。
注: 私のプロジェクトの問題の解決策は、インターフェイス自体を一般的なものにすることですInt1<X>
(もちろん、これよりも適切な名前を使用していますが、これは単なる例です)。