List 和 List 之间的区别[重复]

2024-04-27

我读过很多这方面的内容,我知道:

List<Object> listOfObject = new ArrayList<TYPE>();   // (0)
//can only work for TYPE == Object.
//if TYPE extends Object (and thus objects of type TYPE are Objects),
//this is not the same with Lists: List<Type> is not a List<Object>

现在我读到以下内容是可以的:

List undefinedList = new ArrayList<TYPE>();   // (1)
//works for ANY type (except for primitives)

And

List<?> wildcardList = new ArrayList<TYPE>();   // (2)  
//also works for ANY type (except for primitives)

Then:

List undefinedlist = new ArrayList(); //no TYPE specified
undefinedList.add(new Integer(1)); //WORKS
undefinedList.add(new String("string")); //WORKS

However:

List<?> wildcardList = new ArrayList<TYPE>(); //TYPE specified
wildcardList.add(new TYPE(...)); //COMPILER ERROR

example:

List<?> wildcardList = new ArrayList<String>(); //TYPE specified
wildcardList.add(new String("string")); //COMPILER ERROR: The method add(capture#1-of ?) in the type List<capture#1-of ?> is not applicable for the arguments (String)

我确实理解为什么不能向通配符列表添加任何内容,因为它的类型可以是任何内容。但是,为什么可以添加到undefinedList中呢? 考虑到 (1) 和 (2),它们看起来相同并表现出相同的行为。


List undefinedList and List<?> wildcardList正如您自己发现的那样,两者并不相同。第一个是原始类型,第二个是无界通配符。

如果您想使用泛型类型但不知道或不关心实际类型参数是什么,请使用无界通配符。您不能将任何内容(除了 null )放入此列表中,并且您所知道的关于从中获得的元素是它们扩展了 Object (实际上List<?>是相同的List<? extends Object>)。无界通配符很有用,因为如果你天真地将某些东西声明为List<Object>,例如你不能分配List<String>给它,同时你可以分配一个List<String> to a List<?>

您应该(几乎)永远不需要使用原始类型,它们仅用于与 Java 5 之前编写的代码兼容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

List 和 List 之间的区别[重复] 的相关文章

随机推荐

  • 为什么IL代码中stloc.0后面有一个ldloc.0?

    我正在尝试通过编写小代码片段和检查编译的程序集来学习 CIL 所以我写了这个简单的 if 语句 public static void Main string args Int32 i Int32 Parse Console ReadLine
  • 如何将焦点设置到 django 表单元素的 CharField

    我的登录页面使用 Django 表单 I want to set focus to the first textField username when the page loads 我尝试使用 Jquery 如下 但没有得到结果 forms
  • 背景过滤器不适用于 Chrome 中的嵌套元素

    我有一个div outer和里面一个div inner 都与position absolute and backdrop filter blur 8px https jsbin com nihakiqocu 1 edit html css
  • 什么是 m2e 连接器?

    我想知道 m2e 连接器是什么 除了这个页面之外 我在互联网上没有找到太多描述它们的信息 http objectledge org confluence display TOOLS M2E Connectors http objectled
  • 访问容器管理 Bean 中的事务状态

    我有一个 Stateless EJB http en wikipedia org wiki Enterprise JavaBean使用容器管理的事务 有没有办法访问 状态 javax transaction UserTransaction
  • 监控当前运行的应用程序

    我遇到了一个暂时无法解决的问题 该代码的目的是监视当前正在运行哪些应用程序 我使用了以下代码并记录了生成的包名称 它起作用了 ActivityManager am ActivityManager context getSystemServi
  • array_search 返回错误的键[重复]

    这个问题在这里已经有答案了 我有这个数组 ar key1 gt John key2 gt 0 key3 gt Mary 并且 如果我写 idx array search Mary ar echo idx I get key2 我在网上搜索过
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 网站上出现奇怪的符号(L SEP)?

    我在我的网站上注意到 http www cscc org sg http www cscc org sg 出现了这个奇怪的符号 上面写着 L SEP 在 HTML 代码中 它显示相同的内容 有人可以告诉我如何删除它们吗 那个角色是U 202
  • gcc 不会编译和运行 MySQL C 库

    include
  • 将多个 CSV 文件复制到 postgres

    我正在编写一个 SQL 脚本来将多个 CSV 文件复制到 postgres 数据库中 如下所示 COPY product title department from ys csv CSV HEADER 我有多个文件想要复制 我不想要 COP
  • 我可以编辑 UIImage 属性 CGImage 的像素吗

    UIImage有一个只读属性CGImage 我必须将其像素读取到内存块并对其进行编辑 然后制作一个新的 UIImage 来替换旧的 我想知道是否有办法绕过只读属性并直接编辑这些像素 Thanks 谢谢大家 我找到了一种方法来做到这一点 使用
  • Pytorch ValueError:优化器得到一个空参数列表

    当尝试创建神经网络并使用 Pytorch 对其进行优化时 我得到了 ValueError 优化器得到一个空参数列表 这是代码 import torch nn as nn import torch nn functional as F fro
  • git 项目与存储库,根本区别是什么?

    我有两个项目当前使用 SVN 我正在迁移到 git 我注册了 gitorious 并且可以选择创建新项目或添加存储库 我刚刚开始使用 git 所以我不知道有什么区别 或者更确切地说 如果我只是在一个项目下使用存储库 这意味着什么 如果我这样
  • 快速循环中的并行异步执行

    我的快速代码如下所示 var jsFriendlyFreinds JSObject for friend in friends let jsFriend await FriendsPlugin createFriendResult frie
  • 方案语言:合并两个数字

    如何将列表中的两个整数合并为一个 方案中 例子 11 223 gt 11223 假设列表恰好有两个元素 并且都是数字 define merge numbers lst let 1st number gt string first lst 2
  • 在 angular2 中使用 routerLink 更新模板

    当我移动到另一个模板时 我遇到了模板未更新的问题store location 例如 默认值为Eastleigh如果我搬到USA它将更改为USA但当我去其他地方时它就粘住了USA 我必须刷新页面以便模板更新Collection Store 事
  • 提取两个段落之间的共同词?

    如何提取php5中两个或多个段落之间的常用词 我想总结每个文本以创建排名靠前的单词列表可能会起作用 然后比较它们 我想最基本的方法是 split each paragraph into an array of words using eit
  • Discord 音乐机器人 VoiceClient' 对象没有属性 'create_ytdl_player'

    我想编写自己的不和谐机器人 它可以播放 youtube 上的一些歌曲 但它不会创建 ydl 播放器 这是错误Command raised an exception AttributeError VoiceClient object has
  • List 和 List 之间的区别[重复]

    这个问题在这里已经有答案了 我读过很多这方面的内容 我知道 List listOfObject new ArrayList