java——泛型(代码片段)

老赖的小弟 老赖的小弟     2022-12-02     675

关键词:

文章目录

Java中泛型的概述

泛型广泛的类型
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型,其实就是将程序运行时可能发生的问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)。白话说就是泛型是提供给javac编译器使用的,用于限定数据类型,让编译器在源代码级别上识别出非法数据

如果对于什么是编译器及程序是怎么在Java环境中运行的可以看看下面这篇:

Java中字节码及其优势

Java中泛型的语法规则

泛型格式:

集合类<泛型类型> 变量名 = new 集合类<泛型类型>();

例如:

ArrayList<String> arrayList = new ArrayList<String>();

既然例子是ArrayList的,那么就将就用这个例子说明吧
1、ArrayList,其中<>这对尖括号读作typeof
2、ArrayList,其中的E称为类型参数,整个称为ArrayList泛型类型
3、ArrayList中的String称为实际类型参数,整个ArrayList称为参数化的类型

泛型集合

1、支持泛型的集合中只能存放该集合声明的的泛型指定类型元素

定义的泛型是integer所以存放String就会报错,编译都没有通过

2、关于支持泛型的集合其自带的方法也支持泛型(即在集合的实现类中,都对泛型提供了较好的支持,使用泛型后取出元素不需要类型转换)

泛型方法

如果要在函数上使用一个不明确的数据类型,就可以使用泛型进行定义。在Java程序中普通方法、构造方法中都可以使用泛型。方法使用泛型前,必须对泛型进行声明

语法如下:

public <泛型的声明> 返回值类型 函数名(泛型 变量名)


注意:通常需要放在方法的返回值声明之前,其中T可以是任意字母表示,但是需要大写

例如:

	public <T> T getData(T data) 
		return null;
	

泛型方法示例(代码演示)

代码如下(示例):

public class Test01 

	public static void main(String[] args) 
		// 实例化Test01(为方便后续的测试)
		Test01 test01 = new Test01();
		// 实参为String
		test01.getData("这是方法泛型");
		// 实参为int类型
		test01.getData(123456);
		// 实参为匿名对象
		test01.getData(new Object());
		

	
	// 弄一个泛型不限的(基本就是object类型的),没有返回值,需要参数的getData方法
	public <T> void getData(T data) 
		System.out.println(data);
	


代码如下(输出):

这是方法泛型
123456
java.lang.Object@70dea4e

小结

从这个例子中可以看出我事先定义的getData方法的泛型是所有类型,所及基本所有数据类型都适用,但是如果改变它的泛型的话,那么就只能接受你泛型声明的那个数据类型(引用类型)

泛型类

如果一个类中多处都要用到同一个泛型,这事可以把泛型定义在类上

语法如下:

修饰符 class 类名<泛型>


注意: 静态方法不能使用泛型上定义的泛型,应该将它定义为泛型方法

泛型类示例(代码演示)

代码如下(示例):

public class Test02<T> 

	public static void main(String[] args) 
		// 实例化Test02(为方便后续的测试)
		Test02<Object> test02 = new Test02<>();
		test02.say("这是类的泛型");

	
	public void say(T world) 
		System.out.println(world);
	


代码如下(输出):

这是类的泛型

小结


如果当这个类声明了泛型,这个类里面的方法都得声明对应的泛型,否则,编译都不能进行

泛型接口

语法如下:

interface 接口名<泛型>

泛型接口示例(代码演示)

代码如下(定义一个带有泛型的接口):

public interface MyInterface<T> 
	public void print(T data);


代码如下(实现这个接口的类):

public class MyInterfaceImpl<T> implements MyInterface<T> 
	// 实现接口中的print方法
	@Override
	public void print(T data) 
		System.out.println(data);	
	

代码如下(测试):

public class Test03 

	public static void main(String[] args) 
		// 实例化实现类
		MyInterfaceImpl<Integer> myInterfaceImpl01 = new MyInterfaceImpl<>();
		myInterfaceImpl01.print(123456);
		
		MyInterfaceImpl<String> myInterfaceImpl02 = new MyInterfaceImpl<>();
		myInterfaceImpl02.print("这是接口的实现");
	

代码如下(输出):

123456
这是接口的实现

高级泛型

向下限定,T及其子类

语法如下:

<? extends T>

向上限定,T及其父类

语法如下:

<? super T>

任意类型,如果没有明确,那么就是object及其任意的类了

语法如下:

<?>

总结

注意:泛型类型必须是引用类型(比如 int 的引用类型是Integer)

泛型感觉是一个约束,所谓无规矩不成方圆嘛

个人感觉集合泛型和方法泛型常见一点,其他的比如接口泛型在底层原码中可以看看,还有就是高级泛型基本就是框架底层中能看看

java泛型(代码片段)

查看详情

java泛型介绍(代码片段)

查看详情

java_泛型笔记(代码片段)

文章目录Java_泛型简介Java_泛型的概念Java_为什么存在泛型Java_自定义泛型结构Java_泛型的声明Java_泛型的实例化Java_泛型类Java_泛型方法Java_泛型在继承上的体现Java_通配符的使用Java_泛型简介集合容器类在设计阶段/声明阶段不能确... 查看详情

java泛型(代码片段)

文章目录前言一、泛型1.泛型的好处2.泛型的本质3.泛型类4.泛型接口5.泛型方法5.限定类型变量6.泛型的约束和局限性7.通配符类型总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、泛型1.泛型的好处1.适用于... 查看详情

java泛型(代码片段)

Java泛型技术产生的原因:packagecn.mldn.utli;classPointprivateObjectx;privateObjecty;publicvoidsetX(Objectx)this.x=x;publicvoidsetY(Objecty)this.y=y;publicObjectgetX()returnx;publicObjectgetY()returny; 查看详情

java泛型(代码片段)

泛型01:packageCharTest;importjava.util.ArrayList;@SuppressWarnings("all")publicclassGeneric02publicstaticvoidmain(String[]args)ArrayList<Dog>arrayList=newArrayList<Dog>();a 查看详情

java泛型是什么?一文带你吃透泛型(代码片段)

文章目录1.Java泛型2.泛型类3.泛型接口4.泛型方法5.泛型集合Java编程基础教程系列1.Java泛型Java泛型是JDK1.5中引入的一个新特性,其本质是参数化类型,把类型作为参数传递。其主要的形式有泛型类,泛型接口和泛型方法。泛型概... 查看详情

java-泛型-3(代码片段)

泛型类publicclassTest<TextendsNumber>privateTkey;publicTest(Tkey)this.key=key;publicTgetKey()returnkey;publicvoidsetKey(Tkey)this.key=key;泛型接口publicinterfaceGenerator<T>publi 查看详情

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

泛型1.泛型前言2.泛型接口3.泛型方法1.泛型前言泛型的本质是参数化类型,参数化类型:所操作的数据类型被指定为一个参数,将类型由原来的具体的类型参数化//泛型中:T\\E\\K\\Vimportjava.util.Arrays;//可存在多个泛... 查看详情

java-泛型-3(代码片段)

泛型类publicclassTest<TextendsNumber>privateTkey;publicTest(Tkey)this.key=key;publicTgetKey()returnkey;publicvoidsetKey(Tkey)this.key=key;泛型接口publicinterfaceGenerator<T>publicTfun();泛 查看详情

java基础总结三(泛型异常)(代码片段)

文章目录Java基础总结三(泛型、异常)泛型泛型的创建泛型类泛型接口泛型方法类型擦除泛型的协变与逆变异常异常体系异常处理Java基础总结三(泛型、异常)泛型泛型的创建泛型类我们最常用泛型的地方就是... 查看详情

java泛型(代码片段)

E-Element(在集合中使用,因为集合中存放的是元素)示例:publicclass泛型Epublicstaticvoidmain(String[]args)Integer[]stringArray=1,2,3,4,5,6,7;printArray(stringArray);/****/publicstatic<E>voidprintArray(E[]inputArray)/ 查看详情

java--泛型--泛型接口&泛型方法(代码片段)

泛型接口  packagecom.model.fanxing;/***@Description:测试类*@Author:张紫韩*@Crete2021/6/3022:14*泛型接口和实现类*1.泛型接口的实现类,是一个泛型类,那么要保证实现接口的泛型类的反省表示中要包含泛型接口的泛型标识*2.泛型接口... 查看详情

java--泛型复习(代码片段)

泛型复习泛型的生命周期泛型类泛型接口泛型方法关于泛型方法的总结泛型通配符有限制的通配符泛型的生命周期Java中的泛型,只在编译阶段有效,在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦除... 查看详情

java泛型概述与应用(代码片段)

文章目录泛型1.1泛型概述1.2泛型类1.2.1示例代码1.3泛型方法1.3.1示例代码1.4泛型接口1.4.1示例代码1.5类型通配符1.5.1类型通配符:<?>1.5.2类型通配符上限:<?extends类型>1.5.3类型通配符下限:<?super类型>1.5.4泛型通配符的使用... 查看详情

java泛型总结(代码片段)

一:什么是泛型?泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的... 查看详情

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

文章目录💖泛型的概念✨使用泛型的好处与弊端✨定义和使用含有泛型的类✨定义和使用含有泛型的方法✨定义和使用含有泛型的接口✨泛型的通配符✨通配符的高级使用--受限泛型✨斗地主小案例💖泛型的概念泛型是... 查看详情

java-泛型-2(代码片段)

什么是泛型泛型是在jdk1.5后引入的一种特性,用于规定限制一种类型的。例如List,publicvoidTgetMethod()这种就是泛型适用范围适用于规定返回值类型,参数类型,不确定继承类型等常常用于抽象封装类,例如常用CRUD封... 查看详情