关于 Java泛型, 我有一个非常基本的问题。我想这两个List<Number>
和List<? extends Number>
是同质的。我是对的还是我缺少的基本观念?
泛型类型比较古怪。
<? extends Number>
表示Number或未知的子类。如果获得这样的值,它将是Number
,但是由于您不知道哪个有效,因此无法给出此类型的值。
区别在于参数和返回值。
List<Number> numbers = new ArrayList<Number>();
Number n = 1;
numbers.add(n); // ok.
n = numbers.get(0); // ok
numbers.add(1); // ok.
List<? extends Number> numbers2 = new ArrayList<Double>();
numbers2.add(n); // not ok
n = numbers2.get(0); // ok
List<? super Number> numbers3 = new ArrayList<Serializable>();
numbers3.add(n); // ok
n = numbers3.get(0); // not ok.
super
在一些地方用来表示类型可以是超级类型。例如
在集合中,此方法表示比较器需要能够比较相同类型或任何超级类型。
public static <T> void sort(List<T> list, Comparator<? super T> c)
这意味着你可以
Comparator<Number> comparesAnyNumbers = ...
List<Integer> ints = ...
Collections.sort(ints, comparesAnyNumbers);
本文向大家介绍python中的del,remove和pop on list和有什么不一样?,包括了python中的del,remove和pop on list和有什么不一样?的使用技巧和注意事项,需要的朋友参考一下 您在程序中编写多少行代码都没有关系。如果要删除或删除从Python列表中的任何元素,你必须考虑的区别删除,删除 和流行 的Python列表,并使用哪一个 remove :删除第一个匹配
问题内容: 我是一名新的Java学习者。最近,我在阅读泛型编程,并对此感到困惑。 问题答案: 首先,这些是在不同上下文中使用的完全不同的构造。 是通用类型声明的一部分,例如 它使用类型参数声明泛型类型,并引入界限,因此必须是的子类型。 是带通配符的参数化类型,可以作为普通类型用于变量和方法声明等中: 变量声明诸如装置类型的该被参数化与一些亚型。 例如,给出此声明 您可以: 将的某些子类型分配给:
问题内容: 不会初始化内存,只会将其清零。它返回一个指向新分配的零值的指针。 仅创建切片,地图和通道,并将其初始化返回。 在这种情况下,“初始化”是什么意思?new和make之间还有什么其他区别? 问题答案: 如制作切片,地图和通道中所述: 内置函数make需要一个type ,该类型 必须是slice,map或channel type ,还可以选择后面是特定于类型的表达式列表。 它返回类型的值(不
问题内容: 以下代码之间有什么区别: 和 Python建议采用一种做事方式,但有时似乎不止一种。 问题答案: 一个是函数调用,一个是文字: 使用第二种形式。它更具Python风格,并且可能更快(因为它不涉及加载和调用单独的函数)。
问题内容: 和接口之间的根本区别是什么? 问题答案: 是元素的有序序列,而元素是无序的独特列表。 有序集合(也称为序列)。该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过其整数索引(列表中的位置)访问元素,并在列表中搜索元素。 一个不包含重复元素的集合。更正式地说,集合不包含元素对e1和e2,使得e1.equals(e2)最多包含一个空元素。顾名思义,此接口对数学集合抽象进行建模。
问题内容: 对列表进行排序并保存排序后的列表,同时返回列表的排序后的副本,而不更改原始列表。 但是什么时候使用哪个呢? 哪个更快?又快多少? 之后可以检索列表的原始位置吗? 问题答案: 返回一个新的排序列表,而原始列表不受影响。就地对列表进行排序,使列表索引突变,然后返回None(就像所有就地操作一样)。 适用于任何可迭代的对象,而不仅仅是列表。字符串,元组,字典(你将获得键),生成器等,返回包含