泛型
1、Object类
在没有泛型的情况的下,通过对类型 Object 的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是本身就是一个安全隐患。
2、泛型
也是实现参数类型的任意化,但是在编译的时候能够检查类型安全,并且所有的强制转换都是自动和隐式的。
一、通配符和类型限定
通配符【?】
-
表示不确定的 java 类型;一般是用作<? extends 具体类型>或者<? super 具体类型>
-
通配符只允许出现在引用中(普通变量引用、形参),不允许出现在泛型定义中(泛型类、泛型接口、泛型方法的< >里)
类型限定【T、K、V、E】
-
约定俗称的东西,并不是java中规定的,可以换成任意一个字母,但是可读性会变差;用来表示泛型
-
T (type) 表示具体的一个java类型
-
K、V (key value) 分别代表java键值中的Key Value
-
E (element) 代表Element
区别:
1、“T”和“?”运用的地方不同:“?”是定义在引用变量上,“T”是类上或方法上。
2、类型限定只有<T extends 数据类型> ,只能设定上边界,而通配符既可以设定上边界<? extends 数据类型>也可以设定下边界<? super 数据类型>
https://blog.csdn.net/a18615971648/article/details/115799984
二、泛型接口
Java接口使用泛型,有两种方式:
-
第一种在实现接口的子类依旧使用泛型,在实例化的时候在动态添加type
-
第二种形式,子类实现接口的时候具体化type,在实例化的时候不用再动态添加type
//接口泛型 interface Message<T>{ public void isit(T t); } class MessageTwo<T> implements Message<T>{//第一种在实现接口的子类依旧使用泛型,在实例化的时候在动态添加type public void isit(T t){ System.out.println(t.toString()); } } class MessageThree implements Message<String>{//第二种形式,子类实现接口的时候具体化type,在实例化的时候不用再动态添加type public void isit(String t){ System.out.println(t.toString()); } }
三、泛型类
在类级别上使用泛型,允许在类中的多个地方使用同一类型参数。
-
泛型类使用:在类名后面添加类型参数声明的类,在实例化类的时候指明泛型的具体类型。它允许类操作不同类型的对象,同时保持类型安全。泛型类的定义格式如下
public class ClassName<T> { // 类体 } //泛型类的实例化时,需要指定具体的类型参数: ClassName<String> instance = new ClassName<>(); //这里,<String> 指定了 T 为 String 类型。
四、泛型方法
在方法级别上使用泛型,为方法调用提供更大的灵活性。
-
泛型方法使用:泛型方法是在方法返回类型之前声明类型参数的方法,在调用方法的时候指明泛型的具体类型。泛型方法允许在调用方法时指定不同的类型参数,从而使得一个方法可以在多种类型上操作,同时保持类型安全。泛型方法的定义格式如下
public <T> T methodName(T param) { // 方法体 } //<T>:类型参数声明,表示这是一个泛型方法。 //T:返回类型,表示这个方法将返回一个 T 类型的对象。 //param:参数,类型为 T。 //泛型方法的调用不需要指定类型参数,编译器会根据传入的参数类型自动推断 methodName("Hello, World!"); //在这个例子中,编译器会推断 T 为 String 类型。
它可以定义在普通类中,也可以定义在泛型类中,即泛型方法的类型参数和泛型类的类型参数没有必然联系。泛型类和泛型方法都是泛型编程的重要组成部分,它们提高了代码的复用性和安全性。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话