十分钟深刻理解java高级——泛型(代码片段)

高、远 高、远     2022-12-04     254

关键词:

【1】什么是泛型?

  • 泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
  • 泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定的不同类型来控制形参具体限制的类型)。也就是说在泛型使用过程中,操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。
    引入一个类型变量T(其他大写字母都可以,不过常用的就是T,E,K,V等等),并且用<>括起来,并放在类名的后面。泛型类是允许有多个类型变量的。

【2】为什么需要泛型?

实际开发中,经常有数值类型求和的需求,例如实现int类型的加法, 有时候还需要实现long类型的求和, 如果还需要double类型的求和,需要重新在重载一个输入是double类型的add方法。

如:
在这里插入图片描述


【3】如何使用泛型?

一、泛型类和泛型接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

规则是:在类名或者接口名后面加上<>并且在里面加上大写字母如T,如需多种类型就用逗号隔开如:<T, K>


二、一个类如何实现使用泛型接口的类?

两种方法实现这种类:
未传入泛型实参时:(继续使用一个泛型来代替接口的泛型,在创建对象的时候传入类型实参)
在这里插入图片描述
在new出类的实例时,需要指定具体类型:
在这里插入图片描述
传入泛型实参:(不使用泛型来代替接口的泛型,直接在继承时便指出类型实参)
在这里插入图片描述
在new出类的实例时,和普通的类没区别


三、泛型方法的使用

①什么是泛型方法?

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

②普通方法:

普通方法

③泛型方法:

在这里插入图片描述

**规则:**在public(private等)返回值之间加上 <T>(单个类型)、<T, K, E...>(多个类型),表示这是一个泛型方法。


【4】泛型范围:

一、 T extends String

有时候,我们需要对类型变量加以约束,比如计算两个变量的最小,最大值。

在这里插入图片描述

请问,如果确保传入的两个变量一定有compareTo方法?那么解决这个问题的方案就是将T限制为实现了接口Comparable的类。
在这里插入图片描述
表示: T类型必须是Comparable的子类,否则会引起编译报错。

二、通配符:

? extends X

  • 表示传递给方法的参0数,必须是X的子类(包括X本身)

在这里插入图片描述
在这里插入图片描述


? super X

  • 表示传递给方法的参数,必须是X的超类(包括X本身)

雷同? extends X,参考理解。


【5】Java伪泛型与泛型擦除

请参考我的另一篇文章:泛型擦除 https://blog.csdn.net/qq_45866344/article/details/114645908?spm=1001.2014.3001.5501

最后写作不易,还请点个赞,谢谢。

10分钟深刻理解java高级——注解(代码片段)

文章目录【1】什么是注解?【2】注解有什么用?【3】如何使用注解?一、如何声明注解?二、什么是元注解?①`@Target`作用②`@Retention`作用(特别重要)`RetentionPolicy.SOURCE``... 查看详情

java自用高级编程-5.泛型(代码片段)

一、泛型的理解1.泛型的概念所谓泛型,就是允许在定义类、接口时通过一个标识表示类中某个属性的类型或者是某个方法的返回值及参数类型。这个类型参数将在使用时(例如,继承或实现这个接口,用这个类... 查看详情

换个姿势,十分钟拿下java/kotlin泛型(代码片段)

0x1、引言解完BUG,又有时间摸鱼学点东西了,最近在复习Kotlin,跟着朱涛的《Kotlin编程第一课》查缺补漏。看到泛型这一章时,想起之前面一家小公司时的面试题:说下你对泛型协变和逆变的理解?读者可... 查看详情

深入java泛型(四rxjava中深入理解泛型)(代码片段)

第一章深入Java泛型四、RxJava中深入理解泛型4.1响应式编程4.2观察者模式4.3RxJava是对观察者模式的一种高级运用,或者说是一种升级,它把观察者模式具体化,更加明确了各个对象之间的关系四、RxJava中深入理解泛型4.... 查看详情

java泛型-基础理解(代码片段)

...中经常会看到泛型或者使用到泛型,所以基于自己的理解,拆分几篇文章由浅入深记录一下。为什么需要泛型?泛型这个概念,是在JDK1.5引进来的,其实可以把它理解成一个语法糖,它解决的是什么问题呢... 查看详情

java中的泛型理解(代码片段)

泛型,又名"参数化类型",顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为... 查看详情

让泛型的思维扎根在脑海——深刻理解泛型

1.前言往往一些刚接触C#编程的初学者,对于泛型的认识就是直接跳到对泛型集合的使用上,虽然微软为我们提供了很多内置的泛型类型,但是如果我们只是片面的了解调用方式,这会导致我们对泛型盲目的使用。... 查看详情

java——泛型(代码片段)

...示)小结泛型接口泛型接口示例(代码演示)高级泛型总结Java中泛型的概述泛型广泛的类型Java泛型(generics)是JDK5中引入的一个新特性,泛型提供了编译时类型 查看详情

浅显理解java泛型的super和extends(代码片段)

目录概念简单理解代码样例解读关于List<?superT>add方面返回值方面关于List<?extendsT>add方面返回值方面总结概念简单理解List<?extendsT>表示该集合中存在的都是类型T的子类,包括T自己List<?superT>表示该集合中存的... 查看详情

深入理解java泛型擦除机制(代码片段)

深入理解Java泛型擦除机制我们都知道Java中的泛型可以在编译期对类型检查,避免类型强制转化带来的问题,保证代码的健壮性。不同语言对泛型的支持也不一样,Java中的泛型类型在编译期会擦除,下面一个例子... 查看详情

c#委托深刻理解(代码片段)

usingSystem;usingSystem.Windows.Forms;namespace事件委托练习publicpartialclassForm1:FormpublicForm1()InitializeComponent();//声明委托publicdelegatevoidDel(stringmessage);//创建方法与委托有相同的参数publicvoidMethod1(stri 查看详情

深入java泛型(四rxjava中深入理解泛型)(代码片段)

第一章深入Java泛型四、RxJava中深入理解泛型4.1响应式编程4.2观察者模式4.3RxJava是对观察者模式的一种高级运用,或者说是一种升级,它把观察者模式具体化,更加明确了各个对象之间的关系四、RxJava中深入理解泛型4.... 查看详情

java中泛型的深入理解(代码片段)

文章目录泛型深入泛型基本介绍自定义泛型类自定义泛型方法自定义泛型接口泛型通配符和上下限泛型深入泛型基本介绍泛型的概述:泛型:是JDK5中引入的特性,可以在编译阶段约束操作的数据类型,并进行检查。泛... 查看详情

java重点--泛型(代码片段)

...✨定义和使用含有泛型的接口✨泛型的通配符✨通配符的高级使用--受限泛型✨斗地主小案例💖泛型的概念泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候,可以使用泛型,泛型也可以看做是... 查看详情

花几分钟把java泛型吃透(代码片段)

文章目录1.什么是泛型?2.为什么要引入泛型?3.使用泛型和未使用泛型对比4.泛型中的通配符5.泛型消除6.泛型的定义与使用6.1泛型类6.2泛型接口6.3泛型方法6.4通配符6.5范围限制6.6泛型小案例:1.什么是泛型?泛型... 查看详情

java:泛型类型使用总结(代码片段)

...了程序的类型安全同可以向后兼容。为了帮助读者更好地理解和使用型,本文通过一些示例从基本原理,重要概念,关键技术,以及相似技术比较等多个角度对Java语言中的泛型技术进行了介绍,重点强调了泛... 查看详情

java泛型总结(代码片段)

...形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具... 查看详情

java泛型定义和基本使用笔记(代码片段)

1、泛型的作用以及定义1.概述 在我的理解中,泛型主要面向程序封装和架构设计的使用,在面向对象编程及各种设计模式中有非常广泛的应用。 为什么这么说呢,首先我们要理解什么是泛型,为什么要使用泛型&#... 查看详情