当前位置: 首页 > 图灵资讯 > 技术篇> 说说泛型吧

说说泛型吧

来源:图灵教育
时间:2023-09-03 17:02:41

图文详解 Java 泛型,写得太好了! (qq.com)

Java基础面试问题10个必须知道的问题 (qq.com)

问题引入

在向集合中添加元素的过程中,Addd()方法中填充了Object类,而Object类是所有类别的父类,这导致了一个问题——添加的类型不能统一,这可能导致类型不统一,并在通历集合中取出元素时报告错误。

传统的方法不能限制添加到集合ArrayList中的数据类型。在遍历过程中,需要转换类型。如果集合中的数据量较大,类型转换将极大地影响程序的效率。

Java 泛型(Generics) 是 JDK 5 介绍的一个新特征。

泛型提供了编译过程中的类型安全检测机制,允许在编译过程中检测到非法类型。使用泛参数可以提高代码的可读性和稳定性。本质是参数类型。

  1. 类型像参数一样传递
  2. <数据类型>只能是引用类型,不能是int等基本数据类型

泛型:是一种不确定的数据类型。

常用的通配符有T、E、K、V,?

?java类型表示不确定

T type表示具体的java类型

K java键值中的keyy分别代表V、value

E element代表元素

利用泛型的好处

1 省略强转代码,提高效率;

2 操作中的问题可以提前到编译期,编译时可以检查添加元素的类型,提高安全性。

不用泛型时alt用泛型时alt

追问:什么是泛型擦除?

泛型是为javac编译器提供的,用于限制集合的输入类型,使编译器避免将非法数据插入到源代码级别的集合中。然而,在编译了具有泛型的java程序后,生成的class文件不再具有泛型信息,以免影响程序的运行效率。这个过程被称为擦除。

JVM不知道泛型的存在,因为泛型在编译阶段已经被处理成普通的类型和方法。处理机制是通过类型擦除和擦除规则:

  • 没有具体类型的泛型,以Object为原始类型;
  • 如果有限制类型< T exnteds XClass >,使用XClass作为原始类型;
  • 若有多个限制< T exnteds XClass1 & XClass2 >,以第一边界类型XClass1为原始类型;
问:泛型的使用方法有哪些?

一般有三种使用方法:泛型、泛型接口、泛型方法。

1.泛型类:

///这里的T可以随意写成任何标志,如T、E、K、在实例化泛型类中,V等形式的参数通常用于表示泛型//,特定类型的public必须指定T class Generic<T>{    private T key;    public Generic(T key) {        this.key = key;    }    public T getKey(){        return key;    }}

2.泛型接口:

public interface Generator<T> {    public T method();}

3.泛型方法:

public static < E > void printArray( E[] inputArray ){    for ( E element : inputArray ){        System.out.printf( "%s ", element );    }    System.out.println();}
问:泛型在项目中在哪里使用?
  • 自定义接口通用返回结果 CommonResult<T> 通过参数 T 数据类型可以根据具体的返回类型动态指定结果
  • 定义 Excel 处理类 ExcelUtil<T> 用于动态指定 Excel 导出的数据类型
  • 集合工具建设参考(参考) Collections 中的 sort, binarySearch 方法)