java - 使用集合时覆盖的规则

标签 java collections overriding

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

相关文章:

java - 创建对象时重写方法

java - 与 compose() 一起使用时,使用 RxJava/RxKotlin 2 自定义 Observable Transformer

派生泛型的java删除

java - While 循环字符串检查

c# - 获取唯一元素

symfony - Doctrine - Criteria - expressions - 包含(多对多)

rest - FireStore REST API : How to add a subcollection to a document using REST commands?

java - RAD IDE 中的 @override 错误 - 编译器 1.6

javascript - 使用 Selenium 捕获网络 XHR 日志(带参数的请求/响应)

java - 如何从 HTML/JS 和 android 调用 Java 服务器端方法?