使用集合时覆盖的规则

时间:2016-01-24 15:29:52

标签: java collections override

为什么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> 

并且在过度骑行方法中写出列表li,其实际上与

相同
List<Object>

另外,如果过度骑行和重载方法中的List具有相同的类型,则允许覆盖。

List<String> - over-ridden method
List<String> - over-riding method

1 个答案:

答案 0 :(得分:1)

这是Generics在Java中设计的一个限制(设计漏洞?bug?)。

您的期望是合理的,但他们决定实施(和定义)泛型的方式使其变得不可行。

但是,如果你考虑一下,他们的设计可能比你的期望更合理:实际上,List<String>可能无法直接转换为List<Object> - 必须创造一个整体新List,复制内容。