Effective Java~26. 不要使用 raw type

在编译完成之后尽快发现错误是值得的,理想情况是在编译时

在泛型被添加到 Java 之前,这是一个典型的集合声明

// Raw collection type - don't do this!
// My stamp collection. Contains only Stamp instances.
private final Collection stamps = ... ;

如果你今天使用这个声明,然后不小心把 coin 实例放入你的 stamp 集合中,错误的插入编译和运行没有错误(尽管编译器发出一个模糊的警告):

// Erroneous insertion of coin into stamp collection
stamps.add(new Coin( ... )); // Emits "unchecked call" warning

直到您尝试从 stamp 集合中检索 coin 实例时才会发生错误

// Raw iterator type - don't do this!
for (Iterator i = stamps.iterator(); i.hasNext(); )Stamp stamp = (Stamp) i.next(); // Throws ClassCastExceptionstamp.cancel();

例外

类字面值(class literals)

List.class ,String[].class 和 int.class 都是合法的
List<String>.class 和 List<?>.class 不是合法的

instanceof 操作符

        因为泛型类型信息在运行时被删除,所以在无限制通配符类型以外的参数化类型上使用 instanceof 运算符是非法的

以下是使用泛型类型的instanceof 运算符的首选方法:

// Legitimate use of raw type - instanceof operator
if (o instanceof Set) { // Raw typeSet<?> s = (Set<?>) o; // Wildcard type...
}

        请注意,一旦确定 o 对象是一个 Set ,则必须将其转换为通配符 Set<?> ,而不是原始类型 Set 。 这是一个强制转换,所以不会导致编译器警告。

为了快速参考,下表中总结了本条目(以及本章稍后介绍的一些)中介绍的术语:

术语中文含义举例所在条目
Parameterized type参数化类型List<String>条目 26
Actual type parameter实际类型参数String条目 26
Generic type泛型类型List<E>条目 26
Formal type parameter形式类型参数E条目 26
Unbounded wildcard type无限制通配符类型List<?>条目 26
Raw type原始类型List条目 26
Bounded type parameter限制类型参数<E extends Number>条目 29
Recursive type bound递归类型限制<T extends Comparable<T>>条目 30
Bounded wildcard type限制通配符类型List<? extends Number>条目 31
Generic method泛型方法static <E> List<E> asList(E[] a)条目 30
Type token类型令牌String.class条目 33

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496087.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WCF中的管道——管道类型

管道是所有消息进出WCF应用程序的渠道。它的职责是以统一的方式编制和提供消息。管道中定义了传输、协议和消息拦截。管道以层级结构的形式汇总&#xff0c;就创建了一个管道栈。管道栈以分层的方式进行通信并处理消息。例如&#xff0c;一个管道栈可以使用一个TCP协议管道和一…

android德州扑克计算器,学界 | 一台笔记本打败超算:CMU冷扑大师团队提出全新德扑AI Modicum...

原标题&#xff1a;学界 | 一台笔记本打败超算&#xff1a;CMU冷扑大师团队提出全新德扑AI Modicum选自arXiv参与&#xff1a;路、晓坤CMU 冷扑大师团队在读博士 Noam Brown、Tuomas Sandholm 教授和研究助理 Brandon Amos 近日提交了一个新研究&#xff1a;德州扑克人工智能 M…

Git教程~忽略特殊文件

# Windows: Thumbs.db ehthumbs.db Desktop.ini# Python: *.py[cod] *.so *.egg *.egg-info dist build# My configurations: db.ini deploy_key_rsa# 排除目录 /target/ /logs/# 排除所有.开头的隐藏文件: .* # 排除所有.class文件: *.class# 不排除.gitignore和App.class: !.…

解决“计划任务不存在的问题”方法

唉&#xff0c;最近弄了一点东西&#xff0c;修改了一下计划任务 结果&#xff0c;在此打开计划任务后看到了这个提示 所选择的任务“{0}”不再存在。若要查看当前任务&#xff0c;请单击“刷新”。 我这个系统是Win2008R2 &#xff0c;因为乱改了Windows自己的任务&#xff0c…

神器 | 百度云资源搜索

From&#xff1a;https://blog.csdn.net/qq_21492635/article/details/81109247 直接上神器 该网页没有做自适应&#xff0c;也没有专门的手机站点&#xff0c;因此建议电脑使用。也可下载桌面客户端&#xff08;仅支持windows&#xff09;&#xff0c;稳定不卡&#xff0c;速度…

html前端如何缓存页面,Nuxt中如何做页面html缓存

Nuxt是一款基于Vue的服务端渲染SSR框架在Nuxt框架的API中&#xff0c;有一个叫 serverMiddleware 的服务端中间件&#xff0c;我们可以利用它在返回首屏html前做一些缓存的处理在这之前我们需要了解一个叫LRU的算法&#xff0c;LRU是一种缓存淘汰算法&#xff0c;用链表存储数据…

Google 和 bing 都无法替代的10大深网搜索引擎

From&#xff1a;https://blog.csdn.net/ejinxian/article/details/74081716 当我们想要搜索某些内容时&#xff0c;我们第一个想到的就是打开Google、百度或必应这类的搜索引擎。但针对有些内容&#xff0c;却是这些常规搜索引擎无法获取到的&#xff0c;那就是隐藏在深网的内…

植树节html5游戏,植树节活动

活动概述活动时间:3月10日至3月13日(以实际版本内活动日期为准)活动介绍:一年一度的植树节活动开始了&#xff0c;小伙伴们拿起小铲子&#xff0c;小水桶&#xff0c;今天勤劳来种树&#xff0c;明天不用吸雾霾&#xff01;快来邀请你的小伙伴一同参与活动吧&#xff0c;开开心…

Swagger 注解~用于Controller

Api 用于类&#xff1b;表示标识这个类是swagger的资源 tags–表示说明 value–也是说明&#xff0c;可以使用tags替代但是tags如果有多个值&#xff0c;会生成多个list Api(value"用户controller",tags{"用户操作接口"}) RestController public class Us…

恶梦过后所联想起的

岁月的伤痕&#xff0c;常被现实中的盐份浸得生疼。 已经好几个被记住的清晨&#xff0c;是被不和谐的梦惊醒&#xff0c;昨夜梦中的考试&#xff0c;居然成绩接近零分。早前的梦里&#xff0c;或是家庭作业没做、被老师抽查&#xff0c;或是文章没背诵、被老师在课堂上抽中要求…

大黄蜂(HORNET):比Tor更快更安全的匿名网络

From&#xff1a;https://blog.csdn.net/lee_sire/article/details/50357234 你一定听说过Tor洋葱路由技术&#xff0c;它提供了强大的匿名网络访问功能&#xff0c;以此成为互联网用户、政治活动家、以及记者躲避有关部门限制监控的方法。但Tor最受人诟病的是它蜗牛般的网络连…

HTML在前端开发中起到的作用,什么是字符串,web前端开发里起到什么作用

观察某宝商品数据&#xff0c;有一个东西叫服务器>>>>js的作用重要作用之一>>>>交互>>>>人机交互(事件)>>>>服务器交互(ajax);服务器交互&#xff0c;数据处理方式json>>>>>要把它转化成字符串操作。字符串操作…

linux 0.11 内核学习 -- console.c,控制台

参考《linux内核完全注释》和网上相关文章 /* * 控制台显示操作 */ /* * linux/kernel/console.c * * (C) 1991 Linus Torvalds */ /* * console.c * * This module implements the console io functions * void con_init(void) * void con_write(struct tty_queue * queue)…

Swagger 注解~用于方法

ApiOperation 用于方法&#xff1b;表示一个http请求的操作 value用于方法描述 notes用于提示内容 tags可以重新分组&#xff08;视情况而用&#xff09;ApiParam 用于参数&#xff0c;字段说明&#xff1b;表示对参数的添加元数据&#xff08;说明或是否必填等&#xff09; na…

如何使用Linux匿名上网-四大法宝

From&#xff1a;https://www.linuxprobe.com/linux-anonymity-internet.html 导读 信息时代给我们的生活带来极大便利和好处的同时也带来了很大的风险。一方面&#xff0c;人们只要点击几下按钮&#xff0c;就能基本上访问已知存在的全部信息和知识;另一方面&#xff0c;要是这…

怎么改HTML表单数据,form设置的数据怎么添加到table

如图&#xff1a; 是一个form表单&#xff0c;在顶部输入数据点击新增&#xff0c;怎么把数据插入到下面的表格中&#xff0c;并显示。页面代码&#xff1a;编辑跳转表单的代码&#xff1a;showEditForm(text) >{const data_save this.props.signal.data_save.dataconst da…

Swagger 注解~用于模型

ApiModel 用于模型类 &#xff1b;表示对类进行说明&#xff0c;用于参数用实体类接收 value–表示对象名 description–描述 都可省略ApiModelProperty 用于字段&#xff1b; 表示对model属性的说明或者数据操作更改 value–字段说明 name–重写属性名字 dataType–重写属性类…

jstl与EL表达式处理字符串

uri"http://java.sun.com/jsp/jstl/functions" prefix"fn" %> 上面的 uri 根据你的实际情况定。 ${fn:substring("你要截取的字符串"),beginIndex,endIndex} 当然 当在servlet或者action中 request.setAttribute("user"…

命令行下 pdb 调试 Python 程序

官方参考网站 The Python Debugger &#xff1a; https://docs.python.org/3/library/pdb.html gdb 调试命令的使用及总结&#xff1a;https://blog.csdn.net/freeking101/article/details/54406982 使用 Pdb 调试 Python&#xff1a;https://segmentfault.com/a/1190000006628…

2021年高考成绩查询山东德洲,2021年德州高考状元是谁分数多少分,历年德州高考状元名单...

2020年德州一年一度的高考考试已经结束&#xff0c;今年德州高考状元是谁呢&#xff0c;德州高考状元出自哪个高中学校&#xff0c;文理科分数是多少分&#xff0c;一起来了解。一、2020年德州高考状元名单资料2020年德州高考状元名单和学校相关信息&#xff0c;截至目前发文时…