java泛型的日常应用有:泛型类、泛型普通方法、泛型静态方法、泛型接口、泛型擦除模式、泛型通配符、泛型上下边界。本篇详细讲解java泛型的应用,看不懂来找我。
1.泛型类
泛型类型用于类的定义中,被称为泛型类。最典型应用的就是各种容器类,如:List、Set、Map等。
泛型类的基本写法:
一个普通的泛型类(案例中泛型属性可以正常生成get set方法):
(main方法测试前,请先生成属性对应的get set方法)
演示效果(部分展示)
2. 泛型普通方法
泛型在定义普通泛型方法的时候,可以使用泛型类定义的泛型类型(本案例),也可以在普通方法中定义这个方法自己需要的特定泛型类型(参照下面的泛型静态方法定义自定义泛型方法中使用到的泛型类型)
main方法测试代码:
3. 泛型静态方法
泛型静态方法中必须要声明本个方法中使用的泛型类型(),泛型类和泛型静态方法没有任何关系,泛型类是针对对象的,泛型静态方法针对于是整个类,所以为了避免混淆,建议泛型类声明的泛型类型(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这个类型数据的时候,但不写入数据的时候,使用上边界
测试代码:
效果演示:
下边界的使用:
需要写入数据的时候,但不需要读取的时候
测试代码:
看完这些,你学会了吗?
声明:本文部分素材转载自互联网,如有侵权立即删除 。
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,请使用WINRAR解压,如遇到无法解压的请联系管理员!
8. 精力有限,不少源码未能详细测试(解密),不能分辨部分源码是病毒还是误报,所以没有进行任何修改,大家使用前请进行甄别
丞旭猿论坛
暂无评论内容