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---泛型系统学习的更多相关文章

  1. Dubbo -- 系统学习 笔记 -- 示例 -- 泛化引用

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 泛化引用 泛接口调用方式主要用于客户端没有API接口及模型类元的情况,参数及返回值 ...

  2. JavaSE 千寻简学习笔记

    JavaSE 千寻简学习笔记 简介 TIOBE:编程语言排行榜 官网:https://hellogithub.com/report/tiobe/ 如何高效的学习Java 多写(代码)多写(笔记)多写( ...

  3. 零基础如何系统学习Java Web

    零基础如何系统学习Java Web?   我来给你说一说 你要下决心,我要转行做开发,这样你才能学成. 你要会打字,我公司原来有一个程序员,打字都是两个手一指禅,身为程序员你一指禅怎么写出的代码,半个 ...

  4. Unity3D 装备系统学习Inventory Pro 2.1.2 基础篇

    前言 前一篇 Unity3D 装备系统学习Inventory Pro 2.1.2 总结 基本泛泛的对于Inventory Pro 这个插件进行了讲解,主要是想提炼下通用装备系统结构和类体系.前两天又读 ...

  5. MES系统学习

    MES系统是当今制造型企业信息化的热点,而统一建模语言UML是面向对象建模的标准语言,在软件工程发挥着重要作用.MES系统如何进行UML建模呢,今天和大家重点讨论一下MES系统的UML建模方法,请看本 ...

  6. 001 今天开始系统学习C#

    2016-01-16 之前只是大概了解过c#语言,感觉掌握不牢靠.现在开始系统学习C#.现以该博客作为学习笔记,方便后续查看.C# 目标:系统掌握c#知识 时间:30天 范围:C#基础,Winform ...

  7. Linux系统学习笔记:文件I/O

    Linux支持C语言中的标准I/O函数,同时它还提供了一套SUS标准的I/O库函数.和标准I/O不同,UNIX的I/O函数是不带缓冲的,即每个读写都调用内核中的一个系统调用.本篇总结UNIX的I/O并 ...

  8. Hibernate的系统 学习

    Hibernate的系统 学习 一.Hibernate的介绍 1.什么是Hibernate? 首先,hibernate是数据持久层的一个轻量级框架.数据持久层的框架有很多比如:iBATIS,myBat ...

  9. css系统学习网站

    最近系统学习一下css样式,找到一个不错的网站.http://css.doyoe.com/

  10. 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 ...

随机推荐

  1. Django信号量

    摘自官方文档 使用 信号 Django发送的所有信号的列表.使用该send()方法发送所有内置信号. 参见 有关如何注册和接收信号的信息,请参阅信号调度器上的文档. 用户登录/注销时,身份验证框架会 ...

  2. GitHub入门(一)GIT配置与Hexo博客搭建

    首先安装配置Git环境,由于本人使用Windows操作系统所以从msysgit.github.io下载msysGit Windows版本,安装.(Mac一般自带Git) 安装的时候一般使用默认选项,其 ...

  3. laradock 部署 php 环境 和 laravel/lumen 框架

    环境是windows 10 版本1809,docker 版本18.09.0 首先是下载docker.git, 具体可以参考 http://laradock.io/ 要求 Docker >= 17 ...

  4. http协议组成

    摘要 本文主要内容介绍什么是http协议 了解http协议之前我们先了解一下当我们输入一个url到页面渲染出来,这个过程发什么了什么呢~ 网络开启线程开始解析url DNS解析域名,查询IP 建立TC ...

  5. docker--docker compose 编排工具

    11 docker compose 编排工具 11.1 docker compose 介绍 根据前面所学的知识可知,想要使用Docker部署应用,就要先在应用中编写Dockerfile 文件来构建镜像 ...

  6. [19/05/27-星期一] JavaScript_ 条件语句(if语句)和循环语句(while 、for、do-while)

    一.条件语句 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <ti ...

  7. Julia出现错误ERROR: LoadError: syntax: try without catch or finally

    因项目要求进行机器学习数据可视化,要求尝试使用Julia,在此,记录下遇到的坑,仅为记录效果.后续陆续更新. 问题一:关于LightML库中的坑:ERROR: LoadError: syntax: t ...

  8. nginx重新编译安装upload模块

    由于php处理上传会出现超时,并且显示上传进度官方php不支持nginx+php,所以决定让nginx自己处理上传,我本地环境是mac上已经安装过nginx1.8.0,安装方式为brew,所以需要重新 ...

  9. 7.golang的字符串 string

    golang 字符串为不可变的量 ,字符串定义要使用双引号 package main import "fmt" func main() { var xx string = 'xxx ...

  10. 小白学Python——用 百度翻译API 实现 翻译功能

    本人英语不好,很多词组不认识,只能借助工具:百度翻译和谷歌翻译都不错,近期自学Python,就想能否自己设计一个百度翻译软件呢? 百度翻译开放平台: http://api.fanyi.baidu.co ...