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

和列表

韩彦君
2023-03-14
问题内容

具有以下简单的类结构:

class A {
}

class B extends A {
}

class C extends B {
}

我正在创建一个ArrayList来保留较早创建的类的对象:

List<? extends A> list1 = new ArrayList<A>();
List<? extends B> list2 = new ArrayList<B>();
List<? extends C> list3 = new ArrayList<C>();

List<? super A> list4 = new ArrayList<A>();
List<? super B> list5 = new ArrayList<B>();
List<? super C> list6 = new ArrayList<C>();

我试图向每个列表中添加每个较早创建的类的1个对象:A,B,C。唯一可能的组合是:

  • 将类A,B,C的对象添加到list4

  • 将类B和C的对象添加到list5

  • 将C类的对象html" target="_blank">添加到列表list6。其余尝试会导致编译器错误,例如我们:

类型List中的方法add(capture#1-of?extends A)不适用于参数(A)

为什么不能将A,B,C类的任何对象添加到list1 /
2/3?如果例如list4被定义为A类的超类,那么为什么list4接受A,B,C类的对象,因为list4被定义了?


问题答案:

“?扩展A”表示“源自A的某种类型(或A本身)”。因此,例如,a List<ByteArrayOutputStream>List<? extends OutputStream>- 兼容,但您不应该将a添加FileOutputStream到这样的列表中-
它本来就是一个List<ByteArrayOutputStream>!您所知道的是, 列表中获取的任何内容OutputStream都是某种。

“?super A”表示“是A(或A本身)的超类的某种类型”。例如,a List<OutputStream>与兼容List<? super ByteArrayOutputStream>。您绝对可以ByteArrayOutputStream在这样的列表中添加一个-
但是,如果您从列表中获取一个项目,那么您就不能真正保证它。

有关更多信息,请参见Angelika
Langer的泛型常见问题解答。



 类似资料:
  • 问题内容: 让 假设我要对列表中每个列表的索引元素求和,例如在矩阵列中添加数字以获得单个列表。我假设数据中的所有列表的长度均相等。 如何遍历列表列表而不会出现索引超出范围错误?也许lambda?谢谢! 问题答案: 您可以尝试以下方法: 这里使用的组合和解压的列表,然后根据自己的索引压缩的项目。然后,您可以使用列表推导来遍历相似索引的组,对其进行求和并返回其“原始”位置。 为了更清楚一点,下面是迭代

  • 我有一个grails web应用程序的列表函数。此列表将根据某些搜索条件填充表。Im使用hibernate createCriteria来尝试实现这一点。 在这种情况下,他们可以通过两个不同的关键特征进行搜索。用户名和用户号。 谢谢

  • 我有一个名为的DataFrame想要迭代列表并获得的值,但我得到了以下错误(如预期的那样)。知道我该怎么取消吗?

  • 我终于设法修复了头,使tbody可滚动,但我不知道如何对齐列。 我只想能够滚动通过tbody垂直与头固定在顶部和水平,如果需要通过两个在同一时间。 我不认为滚动条是问题,因为你可以在这里看到: 请注意蓝色和绿色的宽度不同。如果我将整行的宽度调整一个固定的量,这个差异仍然存在。 如果可能的话,获得100%CSS解决方案会很酷。 我的桌子看起来像这样:

  • 问题内容: 我想获取x在嵌套列表中出现的次数。 如果列表是: 还行吧。但是如果列表是: 如何获得1出现的次数?在这种情况下,4。 问题答案: 这是扁平化嵌套序列的另一种方法。将序列展平后,可以很容易地进行检查以找到项目数。 上面的代码打印:

  • 我正在写作业,想知道这实际上是什么定义: