java - java中的下界通配符

标签 java generics wildcard

考虑下面的例子,

List<? super Number> list1 = new ArrayList<>();
list1.add(10);
list1.add(10.10);
list1.add(20.20d);

和我分配给 list1

的另一个列表
List<? super Integer> list = list1;
System.out.println(list.toString());

现在,当我打印列表时,它也包含 double 值但是列表应该只包含整数和整数以上的任何值

如果上面的没问题,那么下面的不应该编译吗?

list.add(30.30);

最佳答案

如果您考虑可以分配给它的可能事物,那么一切都有意义。

List<? super Number> list1 = new ArrayList<Object>(); // works
List<? super Number> list1 = new ArrayList<Number>(); // works
List<? super Number> list1 = new ArrayList<Integer>(); // doesn't work

任何在右侧工作的都将接受 Double

List<? super Integer> list = new ArrayList<Object>(); // works
List<? super Integer> list = new ArrayList<Number>(); // works
List<? super Integer> list = new ArrayList<Integer>(); // works

您可以分配给 list1 的任何内容也可以分配给 list。所以 list = list1 工作得很好。但是并非您可以分配给 list 的所有内容都将接受 Double,因此它不会编译。

关于java - java中的下界通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49352210/

相关文章:

python - 使用 Python Pandas 使用通配符名称搜索对所有列求和

java - 如何在java中动态扩展一个类?

java - 同步 ArrayList

java - servlet 项目中的 ClassNotFoundException

java - 传递一个类参数并返回该类的对象(java)

C# 类型参数作为通用声明

java - 无法在 API 级别 < 23 处正确检查权限

java - db4o 对象管理器企业版是免费的吗?哪里可以下载?它是一个独立的应用程序吗?

unit-testing - 如何在 C# 中使用 Microsoft Fakes 在接口(interface)中 stub 通用方法定义

regex - eclipse 搜索并替换为通配符