一个列表然后为什么代码(下面)编译?当然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");
}
}
}
我注意到,如果您尝试将其设为 a List<String>
,则会收到错误消息“java:Main.MyClass2 不是抽象的,并且不会覆盖 Main.Int2 中的抽象方法 getList()”。我不太明白为什么你在上面的例子中没有得到这个。
注意:我项目中问题的解决方案是让接口本身通用,即Int1<X>
(当然我用的名字比这个更好,只是一个例子)。