泛型 - 图1

1 概念

Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。
泛型的本质是类型参数。

2 泛型方法

2.1 定义与使用

  1. //public <T> 返回类型 method(T arg1,T arg2){}
  2. public <T> stringify(T t){
  3. return JSON.toJSONString(t);
  4. }
  5. public class Test{
  6. public static void main(String[] args) {
  7. new GenericsDemo().stringify(obj);
  8. }
  9. }

3 泛型类

3.1 定义与使用

  1. //public class 类名 <泛型类1,泛型类2,...>{}
  2. public class GenericsDemo <T> {
  3. private T tvar;
  4. }
  5. //在创建对象的时候确定泛型
  6. ArrayList<String> list = new ArrayList<String>()

4 泛型接口

4.1 定义与使用

  1. //修饰符 interface接口名<代表泛型的变量> { }
  2. public interface MyGenericInterface<E>{
  3. public abstract void add(E e);
  4. public abstract E getE();
  5. }
  6. //定义类时确定泛型的类型
  7. public class MyImp1 implements MyGenericInterface<String> {
  8. @Override
  9. public void add(String e) {
  10. @Override
  11. public String getE() { return null;}}
  12. }
  13. //始终不确定泛型的类型,直到创建对象时,确定泛型的类型
  14. public class MyImp2<E> implements MyGenericInterface<E> {
  15. @Override
  16. public void add(E e) {
  17. // 省略...
  18. }
  19. @Override
  20. public E getE() { return null;}
  21. }
  22. //确定泛型
  23. public class GenericInterface {
  24. public static void main(String[] args) {
  25. MyImp2<String> my = new MyImp2<String>();
  26. my.add("aa");
  27. }

5 类型通配符

泛型通配符:当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符表示。
泛型的通配符:不知道使用什么类型来接收的时候,此时可以使用?,?表示未知通配符。
此时只能接受数据,不能往该集合中存储数据。

  1. 通配符高级使用:在JAVA的泛型中可以指定一个泛型的上限和下限。

泛型的上限:

  1. 格式:类型名称 <? extends 类 > 对象名称
  2. 意义:只能接收该类型及其子类
  3. 限制,使用的时候只能get

泛型的下限:

  1. 格式:类型名称 <? super 类 > 对象名称
  2. 意义:只能接收该类型及其父类型
  3. 限制,使用时只能set

常用通配符:

  • E - Element
  • K - Key
  • N - Number
  • T - Type
  • V - Value
  • S,U,V etc. - 2nd, 3rd, 4th types

    6 类型擦除

7 泛型作用及场景

image.png

  1. 安全性

在没有泛型之前,从集合中读取到的每一个对象都必须进行类型转换,如果不小心插入了错误的类型对象,在运行时的转换处理就会出错。

  1. 消除转换

消除源代码中的许多强制类型转换,这使得代码更加可读,并且减少了出错机会。

  1. 提升性能

在非泛型编程中,将筒单类型作为Object传递时会引起Boxing(装箱)和Unboxing(拆箱)操作,这两个过程都是具有很大开销的。引入泛型后,就不必进行Boxing和Unboxing操作了,所以运行效率相对较高,特别在对集合操作非常频繁的系统中,这个特点带来的性能提升更加明显。

  1. 重用性

泛型本身特性

引用资料

CSDN博主「mikechen的互联网架构」
原文链接:https://blog.csdn.net/ChenRui_yz/article/details/122935621