当前位置: 首页 > 面试题库 >

为什么无法致电列表 不与列表 即使整数扩展了数字?

公西俊德
2023-03-14
问题内容

我想知道为什么List<Number>不能用List<Integer>
来代替,即使Integer是Number抽象类的扩展类?存在逻辑错误,因为我也可以使用整数来调用带有参数Number的Method。

public class Que
{

public void enterNumbers(List<Number> nummern)
{
    for (Number number : nummern)
    {
        System.out.println(number + "\n");
    }
}

public void enterNum(Number num)
{
    System.out.println("This is a number " + num);
}

public static void main(String[] args)
{
    Que que = new Que();

    Integer myInteger = new Integer(7);
    // possible (of course!)
    que.enterNum(myInteger);

    List<Integer> num = new ArrayList<Integer>();
    num.add(4);
    num.add(45);
    Integer inte = new Integer(333);

    num.add(inte);
    // not possible ! 
    que.enterNumbers(num);
}
}

为了解决这个问题,我可以使用List<?>List<? extends Number>…,因此不需要我想知道确切原因的解决方案。

我能想到的唯一解决方案是将Number绑定为一种新的数据结构类型。


问题答案:

因为您可以例如添加Numberto
的另一个子类的实例List<Number>,例如type的对象Double,但是显然您不应该被允许将它们添加到List<Integer>

public void myMethod(List<Number> list) {
    list.add(new Double(5.5));
}

如果允许您myMethod使用其实例进行调用,则在调用时List<Integer>会导致类型冲突add



 类似资料:
  • 问题内容: 输出: 但是当我执行以下操作时: 输出: 为什么扩展列表引用而不是列表扩展? 我发现这是因为我在尝试将listC扩展到listB时试图将listB附加到listA。 假设列表不能直接附加/扩展。解决该问题最常用的表格形式是什么? 问题答案: 修改到位列表,不返回任何内容,从而导致。在第二种情况下,这是一个正在扩展的临时列表,该列表在该行后立即消失,而在第一种情况下,可以通过引用。 在尝

  • 问题内容: 在Python(2.7)中发现了从未有过的有趣的东西。 这个: 确实有效,结果是: 但 给 有人可以解释为什么吗?感谢您的回答。 问题答案: Python区分和运算符,并为它们提供了单独的挂钩。和。该类型只是为后者提供了不同的实现。 列表分别实现这些功能更为有效;必须返回一个全新的列表,而可以扩展然后返回。 在C代码中,是由所实现的,该只需调用,或者在python代码中,由。后者根据设

  • 问题内容: 我定义 当我尝试通过以下方式将其转换为数组时: 我得到这个异常: 为什么?它与Integer到Integer完全相同。当类是父子关系时,这不是一般情况 我尝试进行投射: 但是在这里我得到这个错误: 问题是什么? 问题答案: 由于类型擦除,ArrayList在运行时不知道其通用类型,因此它只能为您提供最通用的Object []。您需要使用另一个toArray方法,该方法允许您指定所需的数

  • 本文向大家介绍Dapper.NET 列表扩展,包括了Dapper.NET 列表扩展的使用技巧和注意事项,需要的朋友参考一下 示例 数据库查询中的一个常见情况IN (...)是在运行时在此处生成列表。大多数RDBMS对此没有一个很好的隐喻-并且没有通用的跨RDBMS解决方案。相反,dapper提供了一些温和的自动命令扩展。所需要的只是提供的参数值IEnumerable。涉及的命令@foo将扩展为(@

  • 我需要在列表中执行两个进程 1. 2. 当我同时做其中一个时,它们做得很好,但当我同时做两个时,列表中的一些项目重复;这里可以看到我的代码: 和数据类:

  • 问题内容: 创建数组时,无法更改其大小;它是固定的。好的,看起来不错,我们可以创建一个新的更大的数组并逐个复制值,这有点慢。它的技术背景是什么? 问题答案: 这个问题没有提到语言,因此我将选择基于“ C”的数组作为答案。 数组被分配为单个内存块。增长数组是有问题的,因为正确执行此操作的唯一方法是在最后增长它。为了增加大小N,在数组的末尾必须在下一个分配的地址之前至少有N个空闲字节。 要支持这种类型