java泛型的含义是什么及如何使用
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇"java泛型的含义是什么及如何使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇
千家信息网最后更新 2025年01月20日java泛型的含义是什么及如何使用
这篇"java泛型的含义是什么及如何使用"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"java泛型的含义是什么及如何使用"文章吧。
泛型
实例解释为什么引入泛型
// 不使用泛型List list = new ArrayList();list.add("coding"); // 集合中可以添加不同类型的元素(集合就是这么设计的,主要是为了实现通用性,但也带来了弊端,泛型就是为了解决这个产生的)list.add(1024); // 元素丢进集合中全部变成了ObjectString result1 = list.get(0); // 此行代码编译器不过String result2 = (String)list.get(0); // 如果想要还原集合中元素需要使用强制类型转换,强制类型转换可能引发异常,因为集合中元素类型有多种。String result3 = (String)list.get(1); // 此行代码运行时会报类型转换异常ClassCastException,所以说集合不使用泛型来限制数据类型的话很容易产生bugSystem.out.println(result2);
泛型的定义
1、通过上面例子的引入,我们可以总结出:泛型本质上是参数化类型,我们可以为类,接口,方法指定一个类型参数,通过这个参数来限制操作的数据类型,从而保证类型转换的绝对安全。
2、基本用法:泛型集合
// 使用泛型List str1 = new ArrayList(); // 在<>中指定集合中元素类型str1.add("java");str1.add(1024); // 此行代码编译器报错,也就是限制了集合中类型只能为String类型,避免了强制类型转化时出现异常
泛型的其它用处
上面的实例告诉我们泛型可以解决集合中存在的不足之处,但泛型的作用不止于此。
泛型方法
泛型方法在定义的时候需要在方法的返回类型之前加上
,这个T可以换成其他字母,T代表方法的参数是什么类型,T可以表示任何包装类型,不支持基本类型。 泛型方法并不显式指定其参数的数据类型,而是在使用该方法时才确定数据类型。这样带来的好处就是一个泛型方法可以接受不同类型的输入参数,减少了重复代码。下面的例子仅供说明。
public class Generics_Test { // 泛型方法 public static void print(T[] arr) { System.out.println(arr[0]); } public static void main(String[] args) { String[] str2 = {"test"}; print(str2); Integer[] num = {1024}; print(num); }}
泛型类
引入背景:当一个类中有多个泛型方法,为了避免每个泛型方法在声明的时候都需要加上
来说明其是泛型方法,就引入了泛型类。
// 泛型类public class Generics_Test { public static void print(T[] arr) { // static 仍然需要显示声明,否则会报错,因为静态方法不要类实例化就能调用。 System.out.println(arr[0]); } public void printf(T[] arr) { // 普通方法不需要再声明 System.out.println(arr[0]); } public static void main(String[] args) { Generics_Test gt = new Generics_Test(); String[] str2 = {"test"}; gt.printf(str2); Generics_Test gt1 = new Generics_Test(); Integer[] num = {1024}; gt1.printf(num); }}
泛型的高级用法
通配符:>
使用 > 可以不用指定参数类型,即不用在方法的返回值前声明
// 通配符>public class Generics_Test { public static void print(List> arr) { // 使用 > 可以不用指定参数类型,即不用在方法的返回值前声明 Object result = arr.get(0); System.out.println(result); } public static void main(String[] args) { List str1 = new ArrayList(); str1.add("coding"); print(str1); }}
通配符: extends anyClass>
java的泛型默认是可以使用任何包装类型来实例化一个泛型类对象
public class Generics_Test { public static void main(String[] args) { // 因为object是所有类型的父类,所以可以使用任何包装类型来实例化一个泛型类对象 Generics_Test arr1 = new Generics_Test(); Generics_Test link1 = new Generics_Test(); Generics_Test str1 = new Generics_Test(); }}
限制泛型类的可用类型。
T extends anyClass
:该泛型类接受的类型必须继承或实现 anyClass(其中 anyClass 表示类或接口)
public class Generics_Test { public static void main(String[] args) { Generics_Test arr1 = new Generics_Test(); Generics_Test link1 = new Generics_Test(); Generics_Test list1 = new Generics_Test(); Generics_Test hashmap1 = new Generics_Test(); // 此行代码会报错,因为HashMap没有实现List接口 }}
泛型类的继承
public class Generics_Test{}class SonGenericsClass extends Generics_Test{}
以上就是关于"java泛型的含义是什么及如何使用"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
类型
方法
参数
代码
元素
内容
实例
不用
就是
数据
限制
含义
接口
通配符
会报
包装
强制
不同
例子
对象
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云南塔式服务器价格
哪家邮箱服务器好
网络安全主题教育自查
sql数据库的msdtc
市场监管系统网络安全工作总结
服务器安全狗 装几个
arcgis地形图转换数据库
数据库和现实的仓库有什么区别
数据库原理基本理论
端游大型小游戏服务器
三级网络技术学习资料免费
web服务器的协议名是
防火墙网络安全技术研究
巨兽战场服务器不够
软件开发风险因素
分级保护网络安全域
企业软件开发开发
网络技术公司如何参与套路贷
sql获取最后一行数据库
省联社网络安全建议
软件开发学了又放弃了
软件开发项目组是什么样的
保存时显示数据库异常
卫星电视显示服务器失败
数据库先查询后更新
长城宽带网络安全模式
网络安全都做些什么
vms服务器
铅山软件开发文档
我的世界服务器建筑师