Java泛型深入理解
2021/7/18 8:05:58
本文主要是介绍Java泛型深入理解,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
一.什么是泛型?
在JDK1.5之后,Java通过泛型解决了类型安全的问题,泛型的本质就是参数化的类型,也就是将所操作的数据类型作为参数。
二.泛型有哪些作用?
使用泛型能够写出更加灵活通用的代码。
泛型将对代码的安全性检查从运行期提前到了编译期。
泛型能够省去强制类型转换【由于编译期已经知道了准确的类型,因此在编译期会进行强制的类型转换,不用自己转换】
三.泛型的具体实现有哪些?
泛型类:
泛型类型用于类的定义中,被称为泛型类。通过泛型可以完成对一组类的操作对外开放相同的接口。最典型的就是各种容器类,如:List、Set、Map。
泛型类实例:
//此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型
//在实例化泛型类时,必须指定T的具体类型
public class Generic<T>{
//key这个成员变量的类型为T,T的类型由外部指定
private T key;
public Generic(T key) { //泛型构造方法形参key的类型也为T,T的类型由外部指定
this.key = key;
}
public T getKey(){ //泛型方法getKey的返回值类型为T,T的类型由外部指定
return key;
}
}
泛型方法:
在java中,泛型类的定义非常简单,但是泛型方法就比较复杂了。
尤其是我们见到的大多数泛型类中的成员方法也都使用了泛型,有的甚至泛型类中也包含着泛型方法,这样在初学者中非常容易将泛型方法理解错了。
泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。
/**
* 泛型方法的基本介绍
* @param tClass 传入的泛型实参
* @return T 返回值为T类型
* 说明:
* 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。
* 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。
* 3)<T>表明该方法将使用泛型类型T,此时才可以在方法中使用泛型类型T。
* 4)与泛型类的定义一样,此处T可以随便写为任意标识,常见的如T、E、K、V等形式的参数常用于表示泛型。
*/
public <T> T genericMethod(Class<T> tClass)throws InstantiationException ,
IllegalAccessException{
T instance = tClass.newInstance();
return instance;
}
泛型接口:
//定义一个泛型接口
public interface Generator<T> {
public T next();
}
常用的表示: < E > 、 < T> 、 < K > 、 < V>
泛型通配符:<?> 能代表任何类型
四.泛型擦除
泛型只存在于代码编译阶段,在进入JVM之前,与泛型相关的信息会被擦除掉,专业术语上也叫类型擦除。
这里有一道经典的测试题:
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass());
结果为true 在编译结束后在JVM中都会变成List.class
如果泛型参数无界,那么编译器会将其替换为Object.
如果泛型参数有界,那么编译器会将其替换为边界类型
public class TypeErasureDemo {
public <T> void forEach(Collection<T> collection) {} //1
public <E extends String> void iter(Collection<E> collection) {} //2
}
如1 处代码,编译期会将其泛型替换为了Object,2处代码中编译期将泛型替换为了String
作者:龙马要一直变强啊
这篇关于Java泛型深入理解的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22项目:远程温湿度检测系统
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南