Java泛型(9):动态类型安全
因为可以向Java SE5之前的代码传递泛型容器,所以旧式代码仍有可能破坏你的容器。Java SE5中有一组便利工具,可以解决这种情况下类型检查的问题。
它们是静态方法checkedCollection(); checkedList(); checkedMap(); checkedSet(); checkedSortedMap(); checkedSortedSet();
这些方法的第一个参数是你希望动态检查的容器,第二个参数是你希望强制要求的类型。当受检查的容器插入不正确的对象时会抛出ClassCastException。
public class Test {
@SuppressWarnings("unchecked")
static void oldStyleMethod(List probablyAppels) {
probablyAppels.add(new Banana());
}
public static void main(String[] args) {
List<Apple> apples1 = new ArrayList<>();
oldStyleMethod(apples1);
List<Apple> apples2 = Collections.checkedList(
new ArrayList<>(), Apple.class);
try {
oldStyleMethod(apples2);
} catch(Exception e) {
System.out.println(e);
// java.lang.ClassCastException: Attempt to insert class chapter15.class13.Banana element into collection with element type class chapter15.class13.Apple
}
List<Fruit> pets = Collections.checkedList(
new ArrayList<>(), Fruit.class);
pets.add(new Apple());
pets.add(new Banana());
}
}
class Fruit {}
class Apple extends Fruit {}
class Banana extends Fruit {}
Java泛型(9):动态类型安全的更多相关文章
- 使用Java泛型返回动态类型
返回一个指定类型的集合,并且clazz必须继承IGeoLog对象或者是其本身 <T extends IGeoLog> List<T> getLogListSql(Class&l ...
- Java 泛型和类型安全的容器
使用java SE5之前的容器的一个主要问题就是编译器允许你向容器插入不正确的类型,例如: //: holding/ApplesAndOrangesWithoutGenerics.java // Si ...
- Java深度历险(五)——Java泛型
作者 成富 发布于 2011年3月3日 | 注意:QCon全球软件开发大会(北京)2016年4月21-23日,了解更多详情!17 讨论 分享到:微博微信FacebookTwitter有道云笔记邮件 ...
- java 深度探险 java 泛型
Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在JD ...
- Java泛型总结
1. 什么是泛型?泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型的 ...
- JAVA泛型那些事儿
本篇内容源于本人一个好友sgpro提供的java学习例子,现拿出来给大家分享. 此例子非常直观的通过代码讲解了java泛型的用法和好处,是笔者一直珍藏的最好的泛型学习笔记. 一.面向过程的时代 我们先 ...
- Java——泛型
前言 一般的类和方法,使用的都是具体的类型:基本类型或者自定义的类.如果我们要编写出适用于多种类型的通用代码,那么肯定就不能使用具体的类型.前面我们介绍过多态,多态算是一种泛化机制,但是也会拘泥于继承 ...
- JAVA泛型中的有界类型(extends super)(转)
JDK1.5中引入了泛型(Generic)机制.泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛型方法. Ja ...
- Java 泛型(Generics) 综述
一. 引子 一般的类和方法.仅仅能使用详细类型:要么是基本类型.要么是自己定义类型.假设要编写能够应用于多种类型的代码,这样的刻板的限制对代码的束缚就会非常大. 多态算是一种泛化机制,但对代码的约束还 ...
- Java基础学习总结(83)——Java泛型总结
1. 什么是泛型? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类.可以把类型参数看作是使用参数化类型时指定的类型 ...
随机推荐
- 通过自动回复机器人学Mybatis---加强版
第2章 接口式编程 介绍 Mybatis 的接口式编程,并说明为什么要采用这种形式,以及 Mybatis 是如何实现的
- 域知识深入学习一:Active Directory 域服务
AD DS用来组织,管理,控制网络资源 1.1 Active Directory 域服务概述 AD内的directorydatabase(目录数据库)用来存储用户账户,计算机账户,打印机与共享文件 ...
- 在laravel5.8中集成swoole组件----用协程实现的服务端和客户端(二)---静态文件如何部署
目前,较为成熟的技术是采用laravelS组件,注意和laravel 区别laravelS多了一个大写的S,由于laravelS默认监听5200端口,所以laravel项目要做一些调整 例如: 静态文 ...
- Codeforces Round #455 (Div. 2) 909E. Coprocessor
题 OvO http://codeforces.com/contest/909/problem/E CF455 div2 E CF 909E 解 类似于拓扑排序地进行贪心, 对于 Ei=0 并且入度为 ...
- js中showModalDialog的使用
基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) ...
- 多线程中volatile关键字的作用
原文链接:https://blog.csdn.net/xuwentao37x/article/details/27804169 多线程的程序是出了名的难编写.难验证.难调试.难维护,这通常是件苦差事. ...
- CentOS7部署tomcat
首先检查是否安装了jdk,然后再查看是否配置了JAVA_HOME 配置JAVA_HOME的方法: 我的是jdk已经安装好了是1.8 我需要找到它的安装目录 [root@bogon xwg]# java ...
- springmvc源码解读(简介)
1.客户端请求提交的DispatcherServlet 2.由DispatcherServlet控制器查询一个或者多个HandlerMapping,找到处理请求的Controller. 3.Dispa ...
- TCP拥塞控制算法
转自浅谈TCP拥塞控制算法 本篇文章介绍了几种经典的TCP拥塞控制算法,包括算法原理及各自适用场景. 回顾上篇文章:浅谈 redis 延迟 前言 TCP 通过维护一个拥塞窗口来进行拥塞控制,拥塞控制的 ...
- 黑马vue---19、v-for中key的使用注意事项
黑马vue---19.v-for中key的使用注意事项 一.总结 一句话总结: 必须 在使用 v-for 的同时,指定 唯一的 字符串/数字 类型 :key 值 <p v-for="i ...