java - 面向对象/数字泛型

标签 java oop

我有这种情况,但为什么java不尊重类层次结构?

import ...

public class GenericsTest {

    public static void main(String[] args) {
        List<Integer> myList = new ArrayList<Integer>();
        myList.add(1);
        myList.add(new Integer(2));
        new GenericsTest().doInsert(myList);
    }

    private void doInsert(List<? extends Number> myList) { // Number <- Integer
        myList.add(new Integer(1)); // This don't compiles
    }
}

有人能解释一下吗? 谢谢!!!

最佳答案

泛型中的通配符并不意味着“任何”,而是意味着“我不知道”。所以List<? extends Number>不是“可以容纳任何扩展数字的列表”。它是“一系列扩展了数字的东西,但我不知道它们是什么。”因此向其中添加 Integer 是非法的,因为您不知道 Integer 是否是扩展此列表中的数字的东西。扩展 Number 的任何内容的列表就是 List<Number> .

关于java - 面向对象/数字泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15121230/

相关文章:

c# - 返回作为参数传递的相同对象的方法

java - 如何在坐标很少的情况下使用 AffineTransform?

java - java中的方法可以嵌套,效果如何?

java - Android 文本验证

java - JPA,我怎样才能有两个查询,一个使用惰性查询,一个使用渴望获取?

java - JAVA 中的 OOP - Android

java - 默认 java 任务的 Ant 类路径上有什么(fork 设置为 "false")

oop - OOP 接口(interface)和 FP 类型类的区别

php - 用于列表样式 PHP 项目的标准 OOP 技术

java - 覆盖现有的对象图?