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 ...
随机推荐
- 代码编译时JDK版本和运行时JDK版本不一致启动项目报错
java编译: java编译就是.java文件变成.class文件的过程,这个过程一般在我们常用的编译器中进行,例如Ecliplse和IDEA等:下面以IDEA举例: 执行上述编译使用的JDK版本就是 ...
- Ubuntu - apt 下载源设置为阿里的源
# 备份 sources.list cp /etc/apt/sources.list /etc/apt/sources.list.bak # 切换为阿里的源 echo "deb http:/ ...
- Python基本语法_变量作用域LEGB
目录 目录 软件系统 变量的作用域 高级语言对数据类型的使用过程 作用域的产生 作用域的类型 Llocal局部作用域 Eenclosing嵌套作用域 Gglobal全局作用域 Bbuilt-in内置作 ...
- 阶段3 1.Mybatis_06.使用Mybatis完成DAO层的开发_9 typeAliases标签和package标签
配置别名 上面制定了好了别名后,映射文件就可以简写了.不区分大小写 皆可以小写也可以大写 大小写混着也可以 测试 package 直接把com.itheima.domain下面所有的类都注册了 可以使 ...
- 【Linux 应用编程】基础知识
错误提示 Linux 提供的系统调用API,通常会在失败的时候返回 -1.如果想获取更多更详细的报错信息,需要借助全局变量 errno 和 perror 函数: #include <stdio. ...
- eslint 修改规则 函数形参不使用报错
函数再定义形参以后未使用就会出现报错的问题,需要设置一项eslint 规则 再.eslintrc.js rules里面添加 "no-unused-vars": "of ...
- python数据分析入门(一)----安装pandas
打算入坑, python数据分析 , 所以下载了 <利用python数据分析>的电子书, 影印版 , 14年出版的 , 现在有很多工具对不上号, 但是整体思想还是不变的 , 所以准备工作要 ...
- sentos7网卡改名
一.已经装好系统CentOS7修改网卡为eth0 1. 修改网卡配置文件[root@localhost ~]# mv /etc/sysconfig/network-scripts/ifcfg-ens3 ...
- linux最强编辑神器vim常用命令大全:编辑、插入、删除、替换、保存...
我说vim是编辑器之神大家没有意见吧 下面分享一些vim常用命令,大家可以收藏一下 进入vim: vim配置: vim中光标移动: vim中屏幕滚动: vim中插入文本类: 文本替换: 格式 : 范 ...
- 多线程14-Barrier
, b => Console.WriteLine()); ; i <= ; i++) { Console.Write ...