将空值存储在列表<Object>和列表<?中>



Java的官方文档中写道:

需要注意的是,List<Object>List<?>不是同样。可以将ObjectObject的任何子类型插入List<Object>。但是您只能将null插入到List<?>中。

引用链接。

这似乎不是真的。这两个编译良好并且可用(例如,列表元素可以打印得很好(:

List<Object> l1 = new ArrayList<>();
List<?> l2 = new ArrayList<>();
l1.add(null);
l2.add(null);

你能说出文件中引用的句子的真正含义吗?

否,文本是正确的。null是任何类型的有效值,因此,无论<?>中有什么,都可以在任何列表上调用.add(null)。然而,null(字面上(是您可以添加到List<? extends Whatever>的唯一内容。考虑到.add(null)实际上通常是无用的,让我们忽略它,这让我们可以简单地声明:

不能向List<?>添加任何内容。

这就是文本试图解释的要点。

你为什么什么都不能加?正因为如此:

假设您有一个List<? extend Number>。这意味着你可以有一个List<Integer>List<Double>——这两者都"有效"。但考虑到你不知道它是什么,如果你只是试图向这个列表中添加一个Integer对象(这是一个数字(,那么你可能正在向Doubles列表中添加Integer,这将是非法的。结论:CCD_ 18在CCD_ 19或CCD_ 20的列表中是不可能的。(除null学术案例外(。

相关内容

  • 没有找到相关文章

最新更新