【JavaSE系列-基础篇6】——泛型原始类型
来源:互联网 发布:mac下文件编辑器 编辑:程序博客网 时间:2024/06/08 08:33
原始类型
原始类型是没有实际参数的泛型类或者接口的名字。举个例子,泛型Box类:
public class Box<T> { public void set(T t) { /* ... */ } // ...}
要创建一个参数化类型的Box ,您将为形式类型参数T提供一个实际的类型参数:
Box<Integer> intBox = new Box<>();
如果实际的类型参数被省略,您将创建一个原始类型的Box :
Box rawBox = new Box();
因此,Box是通用类型Box < T >的原始类型。但是,非泛型类或接口类型不是原始类型。
原始类型显示在旧代码中,因为在JDK 5.0之前,很多API类(如Collections类)都不是通用的。当使用原始类型时,您基本上获得了泛型行为 - 一个Box给你的对象。 为了向后兼容,允许将参数化类型分配给其原始类型:
Box<String> stringBox = new Box<>();Box rawBox = stringBox; // OK
但是,如果将原始类型分配给参数化类型,则会发出警告:
Box rawBox = new Box(); // rawBox is a raw type of Box<T>Box<Integer> intBox = rawBox; // warning: unchecked conversion
如果您使用原始类型来调用在相应的通用类型中定义的泛型方法,则还会收到警告:
Box<String> stringBox = new Box<>();Box rawBox = stringBox;rawBox.set(8); // warning: unchecked invocation to set(T)
该警告显示,原始类型绕过通用类型检查,将不安全代码的捕获推迟到运行时。因此,您应避免使用原始类型。 类型擦除部分有关于Java编译器如何使用原始类型的更多信息。
未检查的错误消息
如前所述,当将旧代码与通用代码混合时,您可能会遇到类似于以下内容的警告消息:
Note: Example.java uses unchecked or unsafe operations.Note: Recompile with -Xlint:unchecked for details.
当使用对原始类型进行操作的旧API时,可能会发生这种情况,如以下示例所示:
public class WarningDemo { public static void main(String[] args){ Box<Integer> bi; bi = createBox(); } static Box createBox(){ return new Box(); }}
术语“未选中”表示编译器没有足够的类型信息来执行必要的所有类型检查,以确保类型安全。默认情况下,“未选中”警告被禁用,尽管编译器提供了一个提示。要查看所有“未选中”警告,请重新编译-Xlint:未选中。 使用-Xlint:unchecked重新编译前面的示例显示以下附加信息:
WarningDemo.java:4: warning: [unchecked] unchecked conversionfound : Boxrequired: Box<java.lang.Integer> bi = createBox(); ^1 warning
要完全禁用未选中的警告,请使用-Xlint:-unchecked标志。 @SuppressWarnings(“未选中”)注释会禁止未选中的警告。如果您不熟悉@SuppressWarnings语法,请参阅注释。
- 【JavaSE系列-基础篇6】——泛型原始类型
- 【JavaSE系列-基础篇6】——泛型类型
- 【JavaSE系列-基础篇6】——泛型方法
- 【JavaSE系列-基础篇6】——有界类型参数
- 【JavaSE系列-基础篇6】——数组,集合,泛型宏观把控
- 【JavaSE系列-基础篇6】——为什么使用泛型?
- 【JavaSE系列--基础篇7】——定义一个注解类型
- 【JavaSE系列-基础篇6】——变量
- 【JavaSE系列-基础篇6】——变量基本数据类型
- 【JavaSE系列-基础篇6】——变量默认值
- 【JavaSE系列-基础篇6】——数组
- 【JavaSE系列—基础篇7】——注解基础知识
- 【JavaSE系列-基础篇7】——运算符
- JavaScript中的原始类型——js基础(一)
- javase重新开始系列之基础类型与运算符
- Javase—java基础
- 【JavaSE系列-基础篇1】——面向对象编程概念之对象
- 【JavaSE系列-基础篇2】——面向对象编程概念之类
- 小tip: base64:URL背景图片与web页面性能优化
- react-route
- GitHub恢复本地被删除的文件
- storm 工作模式分析
- 机房重构-DataGridView常用使用方法(vb.Net版)
- 【JavaSE系列-基础篇6】——泛型原始类型
- web项目直接在浏览器上访问不需要带.jsp,直接ip地址加项目名 在web.xml里配置,<welcome-file-list><welcome-file> /view/login.jsp <
- Inside the C++ Object Model 第一讲: 关于对象
- 详解HttpURLConnection(注意末尾的部分)
- 一步一步理解GB、GBDT、xgboost
- Html5--本地文本文件读取与保存
- 11g中高‘Resmgr:Cpu Quantum’等待事件(即使你已经禁用了resource manager)造成数据库hang住的解决办法
- Redis常见的集群方案(转)
- React 实践项目 (一)