为什么java不允许这种覆盖? 我有什么遗漏的吗?
class Abc
{
public void add (List<String> li)
{
}
}
public class Test extends Abc {
public static void main(String args[])
{
}
@Override
public void add (List<Object> li)
{
}
如果我删除它,它确实允许重写该方法
<Object>
只需在重写方法中写入List li,实际上与
相同List<Object>
还要补充一点,如果被重写的 List 和被重写方法中的 List 具有相同的类型,则允许重写。
List<String> - over-ridden method
List<String> - over-riding method
最佳答案
这是 Java 中泛型设计方式的一个限制(设计缺陷?bug?)。
您的期望是合理的,但他们决定实现(和定义)泛型的方式使其不可行。
但是,如果你仔细想想,他们的设计或许比你的预期更加合理:实际上,一个List<String>
可能无法直接转换为List<Object>
- 有些东西必须创造一个全新的List
,将内容复制过来。
关于java - 使用集合时覆盖的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34977586/