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

ArrayList 和Double

宇文和昶
2023-03-14
问题内容

来自http://www.angelikalanger.com/GenericsFAQ/FAQSections/TypeArguments.html#FAQ103:

具有下限的通配符看起来像“?super Type”,代表所有类型的族,它们是Type的超类型,包括Type类型。类型称为下限。

所以为什么

ArrayList<? super Number> psupn1 = new ArrayList<Number>();
psupn1.add(new Double(2));

编译?

Double不是Number的超类型,而是Number的子类…

编辑1:

    ArrayList<? super Number> pextn1 = new ArrayList<Number>();
    psupn1.add(new Integer(2));
    psupn1.add(new Double(2));
    psupn1.add(new Float(2));
    for(Number n : psupn1){ // [Invalid] Number should be change to
    // Object even if I can only add subtype of Number??

    }

问题答案:

您可以 _添加_一个Double,因为无论类型参数E是什么,它都可以保证是Number或超类型…这意味着您可以肯定地从转换DoubleE。您将无法执行以下操作:

Number x = psupn1.get(0);

虽然。

考虑一下,然后尝试创建在逻辑上将其破坏的列表。例如,您不能使用:

// Invalid
ArrayList<? super Number> psupn1 = new ArrayList<Integer>();
psupn1.add(new Double(2));

因为Integer 既不Number父类型 也不 是父类型-它是子类。你可以写:

// Valid
ArrayList<? extends Number> psupn1 = new ArrayList<Integer>();

…因为那是相反的方式。那时您可以写:

Number x = psupn1.get(0);

因为列表中的任何元素都保证可以转换 Number。它涉及 需要转换的方式-转换为泛型类型参数或 从中 进行转换。



 类似资料:
  • 问题内容: ArrayList al = new ArrayList();有什么区别?和ArrayList al = new ArrayList(0)? 问题答案: 如果您查看API,它将显示ArrayList()-构造一个初始容量为10的空列表。 ArrayList(int initialCapacity)-构造一个具有指定初始容量的空列表。

  • 问题内容: 我了解这是作为双重链接列表实现的。它在add和remove上的性能优于,但在get和set方法上却较差。 这是否意味着我应该选择在插入? 我写了一个小测试,发现插入速度更快。那如何链表比? 请参考下面的示例。 问题答案: Linkedlist确实在插入时速度更快,问题出在您的示例中。在您的代码中,您一直都需要附加到末尾。对于ArrayList,它与LinkedList一样容易。您应该做

  • 问题内容: 可有人请提供创建一个Java的例子和上飞?因此,不是执行or ,而是在类实例化时实际为数组/哈希提供种子数据? 例如,类似于PHP的示例: 问题答案:

  • 问题内容: 我需要按商品所在的过道对购物清单进行排序,例如: [面包] [1] [牛奶] [2] [谷物] [3] 我打算使用ArrayList进行此操作,并且想知道如何制作2D ArrayList奖励问题:关于如何按过道编号排序的任何想法? 问题答案: 您没有开设可容纳您的物品和过道信息的课程吗?就像是: 如果不这样做,请考虑创建一个- 与尝试将这些属性粘贴到另一个ArrayList中的Arra

  • 主要内容:1 ArrayList和Vector的区别是什么,2 Java ArrayList的例子,3 Java Vector的例子1 ArrayList和Vector的区别是什么 ArrayList和Vector都实现List接口,且存储元素都是有序的。 但是,ArrayList和Vector类之间还是很多区别的: ArrayList Vector ArrayList是非同步。(线程不安全) Vector是同步的。(线程安全) 如果元素数量超出其容量,ArrayList将增加当前数组大小的50

  • 主要内容:1 ArrayList和LinkedList的区别,2 Java ArrayList和LinkedList的例子1 ArrayList和LinkedList的区别 ArrayList和LinkedList都实现List接口并维护插入顺序。两者都是非同步(线程不安全)类。 下面列出了ArrayList和LinkedList类之间的区别。 ArrayList LinkedList ArrayList在内部使用动态数组存储元素。 LinkedList在内部使用双向链表来存储元素。 使用Arr