1、为什么要使用泛型?

(1)适用于多种数据类型执行相同的代码,利于封装(如,封装Base类、统一的适用于recycleview的adapter等)

(2)泛型中的类型在使用的时候,直接指定即可,不需要进行强制转换。数据转换是很容易带来数据异常的,尤其是当服务端传过来的数据与我们接收的数据类型不同的时候。

2、泛型类、泛型接口、泛型方法?

泛型方法

引入一个类型变量T(其他大写字母都可以,不过常用的就是T,E,K,V等等),并且用<>括起来,并放在类名的后面。泛型类是允许有多个类型变量的。例如:

一个类型变量

两个类型变量

泛型接口

泛型接口与泛型类的定义基本相同

而实现泛型接口的类有两种实现方法:

(1)未传入泛型参数时,那么该类也属于泛型类

那么在new出该实例对象时,需要指定具体类型

(2)在实现泛型接口时,传入泛型参数。

那么在new出该类的实例时,与普通的类就没区别了。

泛型方法

public代表修饰符,表示泛型方法,紧跟后面的T表示返回值。

泛型方法是在调用方法的时候指明泛型的具体参数类型,泛型方法可以在任何场景中使用,包括普通类和泛型类。但是在泛型类中定义普通方法和泛型方法是有区别的:

普通方法:

泛型方法:

关键点:

3、限定类型变量

有时候我们需要对变量类型进行约束。比如我们定义一个泛型方法:

如何才能够保证传进来的a、b两个参数一定有compareTo方法呢?那么我们就要对T进行约束,保证传进来的T参数的类型实现了Comparable类

T extends Comparable表示,传进来的实例对象必须实现了Comparable类,否则将发生编译错误

extends左右都允许有多个,如T,VextendsComparable & Serializable

注意限定类型的时候,只允许有一个类,允许多个接口,如果所限定的类型包含类和接口,那么类要放在最前面,也就是紧跟extends之后的第一个要放类。

类型限定既可以放在泛型方法上,也可以用在泛型类上

T super XXX跟 extends用法一样,只不过super表示传入的类型T只能是XXX或XXX的父类,最高为object类

4、泛型中的约束和局限性

现在我们有泛型类

(1)不能用基本类型实例化

(2)运行时,类型查询只适用于原始类型

因为类型擦除,java虚拟机中的对象并没有泛型类这一说,instanceof和getClass()只能查询到原始类型, 具体的泛型类型时无从得知的。

(3)泛型类的静态上下文中类型变量失效

不能在静态域或静态方法中使用泛型。因为泛型是需要我们在创建对象的时候才知道是什么类型,而对象创建过程中,代码的执行先后顺序是最先执行static部分,然后才是构造函数等。

因此,在对象初始化之前static部分的代码已经执行,而此时的static块并不知道到底是什么类型,因为这个时候我们的对象还没初始化。

(4)不能创建参数化类型的数组

例如Restrict array = new Restrict[10]是错误的,

我们只能声明Restrict[] array;

(5)不能实例化类型变量

(6)不能补货泛型类的实例

但可以这样

5、泛型类型的继承规则

现在我们有一个类和子类

有一个泛型类

Pair和Pair之间没有任何关系

但是泛型类之间可以继承和扩展其他泛型类,例如:List和ArrayList

泛型类和泛型接口

java中什么泛型_Java中的泛型相关推荐

  1. java中什么时候不能用泛型_java中泛型的正确使用姿势

    image.png 泛型是Java中一个非常重要的知识点,在Java集合类框架中泛型被广泛应用.利用好泛型,在系统架构中是一把利器. 泛型类 先看一个例子,restful架构中,需要定义api接口返回 ...

  2. java中什么泛型_java中的泛型(一)

    在java中我们定义接口其实定义的是这个类的功能,在很多时候我们并不关心这个类的类型而是这个类的能力.泛型的出现让我们的代码和代码所能操作的类型不在绑定在一起,不仅可以复用代码降低耦合还可以提高代码的 ...

  3. java 类 方法 带泛型_java中的泛型类和泛型方法

    1.泛型是什么? 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类. 可以在集合框架(Collection fram ...

  4. java基本数据类型泛型_Java中的泛型

    泛型规范在JDK1.5版本中被添加,使用泛型机制编写的代码比起随意使用Object变量然后再进行强制类型转换的代码具有更高的安全性和可读性,同时也更为简洁.泛型对于集合类尤其有用,例如 ArrayLi ...

  5. java参数传入泛型类型_Java 5.0 泛型之 使用泛型统一传入的参数类型

    Java 5.0 泛型之 使用泛型统一传入的参数类型 package Demo; // 使用泛型统一传入的参数类型 class Info28 { private T var; // 此类型由外部决定 ...

  6. java 数组 length 减少_java中数组有没有length()方法?string没有lenght()方法?

    java中数组有没有length()方法,求数组的长度可以使用数组的length属性. int length=arr.length;//求数组的长度 ------------------------- ...

  7. java如何遍历字典_Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  8. .net java 泛型_Java高级特性泛型看这一篇就够了

    作者:qwer1030274531 出自:ITPUB博客 1.为什么我们需要泛型? 通过两段代码就可以知道为什么需要泛型 /*** * 没有泛型的时候实现加法 */public class NonGe ...

  9. java变量存储位置_java 中变量存储位置的区别

    [原文] 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量 ...

  10. java可以多重继承吗_Java中的多重继承与组合vs继承

    java可以多重继承吗 有时我写了几篇有关Java继承,接口和组成的文章. 在这篇文章中,我们将研究多重继承,然后了解组成优于继承的好处. Java中的多重继承 多重继承是创建具有多个超类的单个类的能 ...

最新文章

  1. 【错误记录】PyCharm 运行 Python 程序报错 ( PEP 8: W292 no newline at end of file )
  2. lisp直线连接圆象限电_圆并不难,为什么很多考生就是学不会?
  3. 数学建模上分利器,小论文中稿神器,赶快学习近15年来较新颖的智能优化算法!
  4. 7 Java Performance Metrics to Watch After a Major Release--转
  5. 操作系统习题7—文件系统
  6. python中的函数、生成器的工作原理
  7. mysql 5.1.53_mysql 5.1.53免安装版的优化配备和精简
  8. linux内存管理总结
  9. python生成时间戳_Python 获取时间戳
  10. ygbook和ptcms哪个好_长期更新,国内所有小说建站系统整理
  11. 神经网络训练ai玩游戏,人工神经网络入门
  12. 华为手机pc模式机型_华为 P20 搭载的 PC 模式厉害了,刷新你对手机的认知
  13. 实习之路0--设计模式之策略模式的理解(鸭子类例子)
  14. 维基百科著名程序员列表大全
  15. Python基础教程(第三版)读书笔记(8)
  16. 字节跳动java后端一面面经(头条/西瓜视频)
  17. 58同城自动登录功能 分享给大家!
  18. Android UI基础 仿闲鱼发布页
  19. firebase使用_这就是我希望在开始使用Firebase之前所要知道的
  20. 鸿蒙系统3.0多大内存,鸿蒙2.0终于上机实测 多大内存能跑?

热门文章

  1. 云效支持自定义构建镜像 征集10家企业免费使用
  2. 不做别人思想的“跑马场”(人民论坛)
  3. nodejs——qureystring的作用
  4. jQuery操作示例
  5. DigitalClock的替代者TextClock
  6. Android核心基础(五)
  7. oracle 创建用户
  8. TurboMail邮件服务器帮你应付电子邮件归档危机
  9. 怎么去掉网页上复制到word的文章中各种符号例如向下箭头(↓)?
  10. 重磅! flutter视图局部更新