java 深入技术五 (泛型)
1.泛型概述
泛型的本质:参数化类型
定义
Object obj=new Object();//并不是所有类都可以使用泛型
List <String> list=new ArrayList<String>();//在后面加上类型
2.泛型的声明和使用
使用<T>表示泛型
List<E>
声明泛型,使用泛型
泛型语法:声明类的同时声明泛型<T>,表示一个参数化类型,在声明类变量和实例化对象时,需要给泛型参数传递一个具体的类型值
Class Demo<T>{
Demo <String> demo=new Demo<String>();
这种参数类型可以声明在类,接口和方法的定义中,分别称为泛型类,泛型接口,泛型方法
使用泛型的步骤:1.定义泛型类2.使用泛型类
好处:安全 把运行时异常提前到编译期
好处:简单 不需要进行显示类型转换
向后兼容 List list=new ArrayList<String>();是正确的
泛型不协变:List <Object>list=new ArrayList<String>();是不正确的
3. 集合和泛型的绝配
集合中的所有类都定义了泛型,都支持泛型操作
希望在实际使用时,可以指定为特定的类型
4. 泛型的其他特点
泛型的向后兼容:List list=new ArrayList<String>();
list.add(1);
list.add("wo");
注意:如果两边都声明了泛型,泛型类型必须一致
可以一端有一端没有
泛型的决定权在变量这边,在左边
泛型两边不支持继承关系
List<Object> list=new ArrayList<String>();
5.有限制泛型extends
类型通配符<?>可以用来给<T>赋值,表示任意类型
有限制泛型:在声明泛型的时候,给这个泛型可以接受的类型值一个约束,比如
class Deme<T extends Number>{} 表示Demo类只能操作数值类型的对象,如 Integer,Double
<T extends Collection> extends 指定Colletion 是上限
<? super Student > super 指定Student是下限
<? extends Colletion> 类型通配符和限制泛型合作,使得可以使addAll方法将Collection<Integer>的内容
6.有限制泛型和通配符的配合使用
当你使用泛型明确规定了List里面可以添加元素的类型,如果再添加其他类型的元素,编译器会报错
实例化对象.泛型得相同
// demo = new Demo<String>();
// T只能接受Number及其子类
Demo3<Integer> demo3 = new Demo3<Integer>();
当通配符和有限制泛型配合使用时,可以使变量接受更多类型参数泛型的变量
/有泛型通配符时,不能调用和泛型有关的方法
Demo3<? extends Number> demo4=new Demo3<Number>();
demo4=new Demo3<Integer>();
demo4=new Demo3<Double>();
//demo4.show(new Integer(1));
如果在声明变量时,没有使用泛型,默认为Number;上限
//泛型通配符和有限制泛型结合使用,常用在方法声明中,常用在方法的参数上
7. 有限制泛型super
1.super,不可以在泛型声明中使用,可以喝通配符配合使用
2.super指定了变量可以接受对象的泛型的下现,本身或者父类
3. super可以调用和泛型有关的方法,方法的参数就是下现
java 深入技术五 (泛型)的更多相关文章
- Java笔记(五)泛型
泛型 一.基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型. 类.接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种 ...
- Java Collections API和泛型
Java Collections API和泛型 数据结构和算法 学会一门编程语言,你可以写出一些可以工作的代码用计算机来解决一些问题,然而想要优雅而高效的解决问题,就要学习数据结构和算法了.当然对数据 ...
- [转]Java工程师技术栈--成神之路
一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133http://if ...
- Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式
原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...
- paip.java 架构师之路以及java高级技术
paip.java 架构师之路以及java高级技术 1. Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...
- Java分布式应用技术架构介绍
分布式架构的演进 系统架构演化历程-初始阶段架构
- Java Web技术总结(目录)
来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...
- Java实验报告五:Java网络编程及安全
Java实验报告五:Java网络编程及安全 ...
- Java加密技术
相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法 ...
随机推荐
- arduino红外遥控库IRremote的IRsend类sendRaw函数溢出问题及其解决方法
最近在调试红外遥控格力空调,在论坛中学到了不少东西.参考: (1)<解决问题系列(4)——红外编码分析利器使用> (2)<315Mhz模块传输替代315Mhz遥控器> 调试环境 ...
- vc++2013中使用MySQL connector/C++ 1.1.4静态链接报错
包含头文件 #include <mysql_connection.h> #include <mysql_driver.h> #include <cppconn/state ...
- 【跟着子迟品 underscore】for ... in 存在的浏览器兼容问题你造吗
Why underscore 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. 阅读一些著名框架类库的源码,就好像和一个个大师对 ...
- JavaScript模板引擎artTemplate.js——为什么使用模板引擎?
作为一个工作一年的菜鸟,在公司做了几个外包项目,也接触到了不同形式的web开发.其实也没多少,就是javaweb开发和HTML5移动开发,这两者在页面展示的时候的解决方案还是有所不同的. 1.vo+e ...
- Git和Github简单教程
原文链接:Git和Github简单教程 网络上关于Git和GitHub的教程不少,但是这些教程有的命令太少不够用,有的命令太多,使得初期学习的时候需要额外花不少时间在一些当前用不到的命令上. 这篇文章 ...
- Django登录访问限制 login_requeired
作用: 1. 用户登录之后才可以访问某些页面 2. 如果没登录,跳转到登录页面 3. 用户在跳转的登陆界面中完成登陆后,自动访问跳转到之前访问的地址 要实现这个需求很简单就是在相应的view前面使用装 ...
- java-collections.sort异常Comparison method violates its general contract!
转载:http://www.tuicool.com/articles/MZreyuv 异常信息 java.lang.IllegalArgumentException: Comparison metho ...
- 前端HTML-CSS规范
目录 HTML 语法 HTML5 doctype 语言属性(Language attribute) 字符编码 IE 兼容模式 引入 CSS 和 JavaScript 文件 实用为王 属性顺序 布尔(b ...
- chkdsk磁盘修复命令工具怎么用,怎样运行chkdsk工具修复?
Chkdsk是系统检查磁盘当前状态的一个命令,启动它可以显示磁盘状态.内存状态和指定路径下指定文件的不连续数目.选择“开始→运行”输入“Chkdsk”回车,即可启动Chkdsk,它会自动校验文件并将丢 ...
- Outlook2016 新装进阶操作指南
启动图片自动下载 键盘上同时按下WIN+R,弹出运行输入框,输入outlook,回车后打开Outlook 依次点击左上角文件,选项,信任中心,信任中心设置,自动下载 在窗口右边反勾选"在HT ...