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 深入技术五 (泛型)的更多相关文章

  1. Java笔记(五)泛型

    泛型 一.基本概念和原理 泛型将接口的概念进一步延申,“泛型”的字面意思是广泛的类型. 类.接口和方法都可以应用于非常广泛的类型,代码与它们能够操作 的数据类型不再绑定到一起,同一套代码可以应用到多种 ...

  2. Java Collections API和泛型

    Java Collections API和泛型 数据结构和算法 学会一门编程语言,你可以写出一些可以工作的代码用计算机来解决一些问题,然而想要优雅而高效的解决问题,就要学习数据结构和算法了.当然对数据 ...

  3. [转]Java工程师技术栈--成神之路

    一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http://www.jcp.org/en/jsr/detail?id=133http://if ...

  4. Java进阶(五)Java I/O模型从BIO到NIO和Reactor模式

    原创文章,同步发自作者个人博客,http://www.jasongj.com/java/nio_reactor/ Java I/O模型 同步 vs. 异步 同步I/O 每个请求必须逐个地被处理,一个请 ...

  5. paip.java 架构师之路以及java高级技术

    paip.java 架构师之路以及java高级技术 1.    Annotation 设计模式... 概念满天飞.ORM,IOC,AOP. Validator lambda4j memcache. 对 ...

  6. Java分布式应用技术架构介绍

    分布式架构的演进 系统架构演化历程-初始阶段架构

  7. Java Web技术总结(目录)

    来源于:http://www.jianshu.com/p/539bdb7d6cfa Java Web技术经验总结(一) Java Web技术经验总结(二) Java Web技术经验总结(三) Java ...

  8. Java实验报告五:Java网络编程及安全

    Java实验报告五:Java网络编程及安全                                                                               ...

  9. Java加密技术

    相关链接: Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC Java加密技术(二)——对称加密DES&AES Java加密技术(三)——PBE算法  ...

随机推荐

  1. JAVA格物致知基础篇:你所不知道的返回码

    上篇我们主要讲解利用Jersey组件如何来写一个能保证基本运行的Rest Service, 之所以说能够基本运行是因为接口暴露及其简易,一旦遇到其他的情况了,就无法正确的处理我们的请求.同时,这个接口 ...

  2. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  3. 非对称加密算法RSA

    RSA公钥加密算法是1977年由罗纳德·李维斯特(Ron Rivest).阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的.1987年首次公布,当时他们 ...

  4. python基础-文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

  5. html盒子模型

    http://www.cnblogs.com/sunyunh/archive/2012/09/01/2666841.html

  6. c# Newtonsoft.Json序列化和反序列 js解析

    Newtonsoft.Json下载地址:http://www.newtonsoft.com/products/json/ 参考:      http://www.cnblogs.com/yanweid ...

  7. JavaScript零基础学习系列一

    JavaScript Js分成三大块: ECMAScript:语言本身,是标准,js是它的一个具体实现 BOM:浏览器对象模型 DOM:文档对象模型 ECMAScript有三种具体实现: JavaSc ...

  8. Python学习笔记 之 递归、二维数组顺时针旋转90°、正则表达式

    递归.二维数组顺时针旋转90°.正则表达式 1.   递归算法是一种直接或间接调用自身算法的过程. 特点: 递归就是在过程或函数里调用自身 明确的递归结束条件,即递归出口 简洁,但是不提倡 递归次数多 ...

  9. Alpha阶段第十次Scrum Meeting

    情况简述 Alpha阶段第十次Scrum Meeting 敏捷开发起始时间 2016/11/3 00:00 敏捷开发终止时间 2016/11/4 00:00 会议基本内容摘要 详细定义了API接口,汇 ...

  10. windows下pip安装python模块时报错总结

    http://www.cnblogs.com/liaojiafa/p/5100550.html 前言: 这几天把python版本升级后,发现pip安装模块好多都报错(暂不确定是不是因为升级导致的),我 ...