首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ArrayList上指定类型参数的位置

在ArrayList上指定类型参数的位置
EN

Stack Overflow用户
提问于 2017-04-23 01:24:36
回答 2查看 4.4K关注 0票数 4

两边铸造有什么区别:

代码语言:javascript
运行
复制
List <String>myNumbers = new ArrayList<String>();

相对于:

代码语言:javascript
运行
复制
List <String>myNumbers = new ArrayList();

以及:

代码语言:javascript
运行
复制
List myNumbers = new ArrayList<String>();
EN

Stack Overflow用户

发布于 2017-04-23 01:48:48

第一个例子是类型安全,这意味着如果您试图将String对象以外的任何内容添加到myNumbers列表中,那么您将得到一个编译器错误。

代码语言:javascript
运行
复制
List <String> myNumbers = new ArrayList<String>();

第二个例子也是类型安全的,编译器将确保只将String类型的对象存储在myNumbers列表中。

代码语言:javascript
运行
复制
List <String> myNumbers = new ArrayList();

原始类型

原始类型是没有任何类型参数的泛型类或接口的名称。

在JDK1.5中引入泛型时,只保留原始类型,以便与旧版本的java向后兼容。虽然仍然允许使用原始类型,但您应该避免使用它们,原因如下:

  • 通常,原始类型需要强制转换。
  • 原始类型是,而不是类型安全,一些重要的错误只会在运行时出现。
  • 原始类型的表现力较低&不要像参数化类型那样使用自文档的方式。

最后一个示例是原始类型,这意味着我们可以将所有类型的对象添加到myNumbers列表中,但是,您应该尽可能地避免它们。

代码语言:javascript
运行
复制
List myNumbers = new ArrayList<String>();

备注--如果您不指定类型,如上面所示,myNumbers列表中的每一项都被视为类型Object

在哪里指定ArrayList上的类型参数?

从您展示的示例来看,这是首选的方法:

代码语言:javascript
运行
复制
List <String> myNumbers = new ArrayList<String>();

但是,只要编译器能够从上下文中推断类型参数,就可以用空的类型参数集(< >)替换调用泛型类的构造函数所需的类型参数。

意思不是这个意思:

代码语言:javascript
运行
复制
List <String> myNumbers = new ArrayList<String>();

我们可以这样做:

代码语言:javascript
运行
复制
List <String> myNumbers = new ArrayList<>();
票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43566460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档