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 не является абстрактным и не переопределяет абстрактный метод getList() в Main.Int2". Я не совсем понимаю, почему вы не получили это в приведенном выше примере.
Примечание. Решение проблемы в моем проекте состоит в том, чтобы сделать сам интерфейс общим, т.е. Int1<X>
(конечно, я использую более лучшие имена, чем это, его пример).