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 ...
随机推荐
- Web.Config全攻略
一.认识Web.config文件 Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方 ...
- 中国MOOC_面向对象程序设计——Java语言_期末考试编程题_1细胞自动机
期末考试编程题 返回 这是期末考试的编程题 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间之前提交答案,系统将取其中的最高分作为最终成 ...
- 我在DBGridEh增加一栏复选框及对应操作的解决方案
最近客户有个需求,要求对单据列表里指定的单据进行批量审核,很自然的,我想到了在DBGridEh增加一栏复选框的列,审核时遍历所有单据,将打了勾的单据审核就可以了.查阅了网上很多文章,不外有2个方案,1 ...
- docker nginx ssl
docker run -d -p 80:80 -p 443:443 -v $(pwd)/conf/conf.d:/etc/nginx/conf.d -v $(pwd)/cert:/etc/nginx/ ...
- TCP/IP协议-1
转载资源,链接地址https://www.cnblogs.com/evablogs/p/6709707.html
- 【Qt开发】如何将内存图像数据封装成QImage V1
如何将内存图像数据封装成QImage 当采用Qt开发相机数据采集软件时,势必会遇到采集内存图像并进行处理(如缩放.旋转)操作.如果能够将内存图像数据封装成QImage,则可以利用QImage强大的图像 ...
- Golang基本类型整理
总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次. Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入 ...
- WHY吃糖果 QDUOJ 二分嵌套
WHY吃糖果 QDUOJ 二分嵌套 原题链接 解题思路参考链接 题意 给出一个\(n*n\)的矩阵,每个格子的权值为\(i*i+j*j+i*j+100000*(i-j)\),求该矩阵中第m小的权值为多 ...
- [LeetCode] 116. 填充每个节点的下一个右侧节点指针
题目链接 : https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/ 题目描述: 给定一个完美二叉树 ...
- Python 入门之Python基础知识
Python 入门之Python基础知识 1.变量 (1)变量就是把程序运行的中间结果临时存在内存中,以便后续代码使用 (2)变量的作用: 昵称,就是代指内存中某个地址中的内容 a = 123 变量名 ...