JavaSE---泛型系统学习
1、概述
1.1、泛型:
允许在 定义 类、接口、方法时 使用 类型形参,这个类型形参 将在声明变量、创建对象、调用方法时 动态地指定;
1.2、jdk5后,引入了 参数化类型(允许程序在创建集合时指定集合元素的类型) 的概念;
1.3、Java的参数化类型 被称为 泛型;
1.4、jdk7之前,使用带泛型的接口,调用构造器创建对象时构造器后必须带泛型;
jdk7后,只需要带'<>'即可;
eg:
//jdk7之前 List<String> list=new ArrayList<String>();
//jdk7后 List<String> list2=new ArrayList<>();
2、自定义泛型接口、泛型类
/**
* 自定义泛型类
* @param <T> element's type
*/
private static class Mine<T>{
//***构造器 无需加泛型
private Mine(){ }
} /**
* 自定义泛型接口
* @param <E> element
*/
private static interface My<E>{
void say();
} 使用: Mine<String> mine=new Mine<>();
3、泛型接口/类 派生子类
/**
* 自定义泛型接口
* @param <E> element
*/
private static interface My<E>{
void say();
} /**
* 泛型接口/类 派生子类
* ****泛型接口可不指定泛型类型
*/
private static class Zi implements My{
@Override
public void say() { }
} /**
* 泛型接口/类 派生子类
* ****泛型接口可指定泛型类型
*/
private static class Zi2 implements My<String>{
@Override
public void say() { }
}
4、类型通配符
4.1、 使用 泛型类 时,都应该 为泛型类 传入一个类型实参(若没有传入类型实参,编译器会发出泛型警告);
4.2、 Java泛型设计的原则:只要代码在编译期没有出现警告,就不会遇到运行时ClassCastException;
4.3、 类型通配符: 是一个问号'?',将一个问号作为 类型实参 传入; eg:List<?>
5、设定类型通配符的上限
5.1、 有时候 不需要 作为所有类型的父类,只需要 代表某一类型的父类
/**
* 自定义泛型接口
* @param <E> element
*/
private static interface My<E>{
void say();
} /**
* 泛型接口/类 派生子类
* ****泛型接口可不指定泛型类型
*/
private static class Zi implements My{
@Override
public void say() { }
} /**
* 类型通配符上限
*/
private static class A{ public void say(List<? extends Zi> list){ } }
6、设定类型形参的上限
6.1、Java支持 在定义类型形参时设定上限;
/**
* 设定 类型形参 上限(单个上限)
* @param <T>
*/
private static class B<T extends String>{ } /**
* 设定 类型形参 上限(多个上限)
* @param <T>
*/
private static class C<T extends String & Serializable>{ }
7、自定义泛型方法
7.1、泛型方法 :
声明方法时,定义一个或多个类型形参;
7.2、语法:
修饰符 <T,S> 返回值类型 方法名(形参列表){方法体...}
7.3、与普通方法的区别:
a,多了类型形参声明;
b,类型形参使用<>,多个以','分隔,位于 修饰符与方法返回值之间;
/**
* 泛型方法
*/
private static class D{ private <T extends String> void say(T t){ }
}
8、设定通配符的下限
8.1、super
/**
* 设定 通配符 下限
*/
private static class E{ private <T> void say(List<? super T> list){ } }
9、反射与泛型
9.1、jdk5后,Java为Class类增加了泛型,eg :Class<?>; 避免使用反射生成的对象需要类型强制转换;
10、泛型的优势:
1.1、编译时检测类型(避免 ClassCastException);
JavaSE---泛型系统学习的更多相关文章
- Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用
Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值 ...
- JavaSE 千寻简学习笔记
JavaSE 千寻简学习笔记 简介 TIOBE:编程语言排行榜 官网:https://hellogithub.com/report/tiobe/ 如何高效的学习Java 多写(代码)多写(笔记)多写( ...
- 零基础如何系统学习Java Web
零基础如何系统学习Java Web? 我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...
- Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇
前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...
- MES系统学习
MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...
- 001 今天开始系统学习C#
2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...
- Linux系统学习笔记:文件I/O
Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...
- Hibernate的系统 学习
Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...
- css系统学习网站
最近系统学习一下css样式,找到一个不错的网站.http://css.doyoe.com/
- Ubuntu LTS 系统学习使用体会和实用工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04
Ubuntu LTS 系统学习体会和工具软件汇总 6.04 8.04 10.04 12.04 14.04 16.04 ubuntu入门必备pdf:http://download.csdn.net/de ...
随机推荐
- Vue开发调试神器 vue-devtools
Vue开发调试神器: vue-devtools 1. 下载Chrome扩展插件GitHub下载地址: https://github.com/vuejs/vue-devtools 建议使用npm淘宝镜像 ...
- oracle-控制文件的备份和恢复
本篇将介绍各种备份及恢复控制文件的方法,在介绍恢复时,以备份和重做日志(包括归档日志和在线日志)没有丢失为前提. 无备份情况下的控制文件恢复参考13.3,丢失重做日志的情况请参考12篇“不完全数据库恢 ...
- 【MM系列】SAP 交货单屏幕增强
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[MM系列]SAP 交货单屏幕增强 前言部分 ...
- vue中的$EventBus.$emit、$on的应用
今天在项目中遇到的一个需求: 在一个选项卡功能的页面,出现的问题是,当点击选项卡的某个选项时,会同时加载整个选项卡的数据,本身产品就很大,数据很多,所以这个问题无法忽略: 仔细研究下发现,当刚进入页面 ...
- ThinkPHP目录下面php文件 Access denied. 的问题
对于这种拒绝访问的报错,从我遇到过的问题总结来讲,可以从几个方向入手: 1. 文件权限. 最容易想到的也是这个 使用命令chmod -R 777 目录名 2. 环境配置. 这个我也是有遇到过的 ...
- [转帖]探秘华为(二):华为和H3C(华三)的分道扬镳
探秘华为(二):华为和H3C(华三)的分道扬镳 https://baijiahao.baidu.com/s?id=1620781715767053734&wfr=spider&for= ...
- [转帖]怎样选择(FC-SAN)光纤通道(存储)交换机
怎样选择(FC-SAN)光纤通道(存储)交换机 https://blog.csdn.net/sinat_30171789/article/details/50510936 交换机的种类非常多... ...
- PostgreSQL索引思考
当在看Monetdb列存行只支持IMPRINTS和ORDERED这两种索引,且只支持定长数值类型时,就在思考,对于列存,还有必要建索引吗?在PostgreSQL的索引就要灵活很多,我对常用列建合理的索 ...
- CSS 毛玻璃效果
效果图: <!DOCTYPE html> <html lang="en" dir="ltr"> <head> <met ...
- vscode学习(三)之如何修改打开终端的默认shell
实现 第一步:打开VSCode的设置(Preferences>User Settings) 第二步:搜索terminal.integrated.shell.osx 的 并把它的值改为你的zsh安 ...