网站首页 > java教程 正文
泛型的日常应用有:泛型类、泛型普通方法、泛型静态方法、泛型接口、泛型擦除模式、泛型通配符、泛型上下边界。
1. 泛型类
泛型类型用于类的定义中,被称为泛型类。最典型应用的就是各种容器类,如:List、Set、Map等。
泛型类的基本写法:
一个普通的泛型类(案例中泛型属性可以正常生成get set方法):
(main方法测试前,请先生成属性对应的get set方法)
演示效果(部分展示)
2. 泛型普通方法
泛型在定义普通泛型方法的时候,可以使用泛型类定义的泛型类型(本案例),也可以在普通方法中定义这个方法自己需要的特定泛型类型(参照下面的泛型静态方法定义自定义泛型方法中使用到的泛型类型)
main方法测试代码:
控制台效果:
3. 泛型静态方法
泛型静态方法中必须要声明本个方法中使用的泛型类型(<W>),泛型类和泛型静态方法没有任何关系,泛型类是针对对象的,泛型静态方法针对于是整个类,所以为了避免混淆,建议泛型类声明的泛型类型(T)和泛型静态方法中声明的泛型类型(W)使用不同的字符来表示。
以下是无返回值的泛型静态方法:
main方法测试:
有返回值泛型静态方法:
main方法测试:
控制台运行效果:
4.泛型接口
泛型接口与泛型类的定义及使用基本相同。
泛型接口的实现类,可以指定具体的泛型接口的具体泛型的类型。
泛型接口
泛型接口实现类(实现泛型接口中的泛型类型)
main方法测试:
控制台演示效果:
泛型接口的实现,如果没有指定具体的泛型类型,必须要在这个实现类中声明一个泛型类型占位符给接口用。
泛型接口实现类(没有实现泛型接口中的泛型类型)
main方法测试:
控制台效果:
5.泛型的擦除模式
Java中的泛型实际是伪泛型,在代码编译期间有泛型做限制,但在代码运行期间,会将所有的泛型全部擦除掉。所以无论使用什么样不同类型的泛型,结果其class对象都是一致的
使用不同类型的泛型,比较其class文件,发现是相等的,证明泛型在运行期间被擦除
运行结果:
为什么要使用擦除模式?
为了兼容JDK老版本的编码。
6.泛型通配符
Java中的继承并不是泛型中的继承。也就是说Java中的父子关系,在泛型中并不是父子关系
针对于上面的show方法进行以下测试,分别定义两个不同类型泛型的类型,分别调用show方法,我们会发现p.show(p)正常执行,但是p.show(p1)无法执行,编译报错,由此证明Java中Number是Integer的父类,但是在泛型中,泛型并不知道Number是Integer的父类
通配符:由于java中的继承关系,在泛型中不做任何声明修饰的情况下,是不被认可的,所以要使用通配符进行处理。接下来会使用通配符在泛型中将java中的继承关系重新绑定。
通配符一般使用?来表示,可以理解为?在泛型中所有类的父类。
使用通配符后代码正常编译执行:
演示效果:
7. 泛型上下边界
上面在泛型中的继承问题,通过使用通配符就可以很好的解决掉,但是我们会发现如果只使用通配符这个泛型的绑定没有任何意义,因为使用通配符就意味着所有的类型都可以注入进来,所以为了解决这个问题,泛型引入了上边界和下边界。
Extends(上边界)和super(下边界)关键字
上边界使用:
在读取T这个类型数据的时候,但不写入数据的时候,使用上边界
测试代码:
效果演示:
下边界使用:
需要写入数据的时候,但不需要读取的时候
测试代码:
写了这么多,如果大家还有不明白的地方,可以关注我,私信我。
看完记得点赞收藏,感谢支持。
猜你喜欢
- 2024-10-16 Java泛型详解(完整版)必看(java 泛型 t)
- 2024-10-16 Java泛型最全总结(java泛型的实现原理)
- 2024-10-16 Java高级面试:Java的泛型实现机制是怎么样的?
- 2024-10-16 深入理解 Java 泛型(java泛型的实现原理)
- 2024-10-16 关于Java中的泛型使用你不知道的那些事?
- 2024-10-16 Java泛型机制详解;这些你都知道吗?
- 2024-10-16 Java中的泛型是什么?(java里面的泛型)
- 2024-10-16 学习廖雪峰的JAVA教程---泛型(使用泛型)
- 2024-10-16 Java泛型的好处及实现原理详解(java里泛型)
- 2024-10-16 java中的泛型是什么(java中泛型的理解)
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)