Java 泛型学习

泛型可以解决数据类型的安全性问题。

简单泛型类

泛型方法

在一个普通类中定义一个泛型方法

类型变量的限定

类或者方法对类型变量加以约束
例如

public <T extends Comparable>

意思是将泛型参数T限制为Comparable

Java虚拟机中泛型转换小结

  • 虚拟机中没有泛型,只有普通的类和方法
  • 所有的类型参数都会被其限定类型替换
  • 桥方法被合成来保持多态
  • 为保持类型安全性,必要时插入强制类型转换

泛型的安全性警告

在实例化泛型类时,如果未指定一个具体的类型参数,会提示一个不安全操作的unchecked警告信息, 但是并不会影响使用

Java泛型的约束和局限

  • 在泛型操作中子类的泛型类型是不能用父类的泛型类型来接收的。
  • 不能用基本类型实例化类型参数,即类型参数不能为8种基本数据类型,可以使用其对应的包装类来完成。
  • 运行时类型查询只适用于原始类型,因为运行时类型擦除,虚拟机中所有的类型查询只会产生原始类型。
  • 不能创建参数化类型的数组,即不支持泛型数组。
  • varargs警告
  • 不能实例化类型变量
  • 不能在静态域或者方法中引用类型变量
  • 不能捕获或者抛出泛型类对象, 泛型类不能继承Throwable,在编译时期就会报错。
  • 类型擦除后的冲突

泛型类型的继承规则

通配符类型

子类型限定通配符

例如

public void printBuddies(SimpleGenerics<? extends Employee> p)

参数p类型都是Employee的子类限定, 泛型操作设置为一个对象的范围上限。范型上限使用extends关键字声明,表示泛型的类型可能是所指定的类型或者是此类型的子类。

超类型限定通配符

例如

public void printBuddies(SimpleGenerics<? super Employee> p)

参数p类型都是Employee的超类限定,即表示的是任何被Employee继承的类。
泛型下限使用super进行声明,表示泛型的类型可能是所指定的类型,或者是此类型的父类型,或是Object(Object的是所有对象的超类)。

无限定通配符

可以匹配任意泛型对象

public void printBuddies(SimpleGenerics<?> p)

通配符捕获

泛型接口

不仅可以声明一个泛型类,也可以声明一个泛型接口,使用方式与之前相同。

泛型接口子类实现的两种方式

  • 在子类的定义上声明泛型类型,此时子类仍然是一个泛型类
  • 直接在接口中指定具体的类型,此时子类使用时不需要再指定泛型,因为声明子类时已经明确地指定了具体类型。

转载于:https://www.cnblogs.com/abel-huang/p/7784085.html

2017-9-5-Java 泛型相关推荐

  1. [转]JAVA泛型通配符T,E,K,V区别,T以及ClassT,Class?的区别

    原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...

  2. 不正确 有三种形式 说法 通配泛型_一看就懂 详解JAVA泛型通配符T,E,K,V区别...

    1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...

  3. 一文搞懂 Java 泛型,非常详细!

    作者: ZiWenXie http://www.ziwenxie.site/2017/03/01/java-generic/ 引言 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广 ...

  4. (转)JAVA泛型通配符T,E,K,V区别,T以及Class,Class的区别

    1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数.这种参数类型可以用在类.接口和方法的创建中,分别称为泛型类.泛型接口.泛 ...

  5. JAVA泛型通配符T,E,K,V区别,T以及ClassT,ClassT的区别

    原文地址:https://www.jianshu.com/p/95f349258afb 1. 先解释下泛型概念 泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被 ...

  6. java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客

    Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...

  7. Java泛型 通配符? extends与super

    本文来源:https://i.cnblogs.com/EditPosts.aspx?opt=1 感谢博主.本文仅供参考学习. Java 泛型 关键字说明 ? 通配符类型 <? extends T ...

  8. 泛型java博客园,Java深度历险之Java泛型

    Java泛型(generics)是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在JD ...

  9. Java学习笔记(二一)——Java 泛型

    [前面的话] 最近脸好干,掉皮,需要买点化妆品了. Java泛型好好学习一下. [定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个 ...

  10. 聊一聊Java 泛型通配符 T,E,K,V,?

    欢迎关注方志朋的博客,回复"666"获面试宝典 | 前言 Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者 ...

最新文章

  1. VTK:KDTree时序用法实战
  2. php20个字,北京人会说不会写的20个字,第一个我就跪了
  3. 安卓rpg绅士游戏资源_海贼无双3(动作游戏)——电脑安卓单机游戏下载资源分享...
  4. 幼儿园ppt计算机考试试题,全国“xx杯”计算机应用基础类说课大赛优秀作品:幼儿园里的各类朋友说课课件.ppt...
  5. Codeforces 446C. DZY Loves Fibonacci Numbers【斐波那契+线段树】
  6. SASL讲解,以及在Spark中的应用
  7. 创建WPF单实例应用程序
  8. ssh 端口转发实现外网 80 端口映射到内网 80 端口
  9. java实现Execl中的STDEVP函数
  10. python RTL自动生成_用Python自动生成快闪文字视频
  11. ChIP-seq笔记
  12. linux简易离线词典下载手机版,Linux离线查询字典的方法
  13. 微信小程序 之修改switch组件尺寸大小
  14. canvas SVG webGL比较
  15. 极简步骤试玩Ant Design Pro myapp demo
  16. STM32CubeMX学习笔记(25)——FatFs文件系统使用(操作SPI Flash)
  17. 自建团队app公司外包免编程app打包平台优缺点分析
  18. 阿里云输出计算 天猫商家日处理400万订
  19. RabbitMQ系列教程一:消息中间件的诸侯征战史
  20. Windows版本Anaconda安装教程

热门文章

  1. sccm2012 客户端推送安装故障解决一例
  2. YbSoftwareFactory 代码生成插件【八】:基于JQuery EasyUI、Web Api的 ASP.NET MVC 代码生成插件...
  3. PKI世界中两个知名的情侣 Alice和Bob
  4. 你绝对不知道浏览器还有这样的功能
  5. VMware15.5安装Linux虚拟机(Centos7)图文教程
  6. [Java] 蓝桥杯ADV-96 算法提高 复数求和
  7. python的浮点数_python – range()用于浮点数
  8. 克服跨洋网络延迟,使用Docker Hub Mirror加速Docker官方镜像下载
  9. mysql 修改字段长度
  10. 开发环境搭建3:linux下tuxedo安装