欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > tij15_泛型

tij15_泛型

2025/4/18 22:39:18 来源:https://blog.csdn.net/heroicpoem/article/details/144547009  浏览:    关键词:tij15_泛型

一句话概括:参数化类型。
意思是:在类、接口、方法中,有1个特殊的参数表示具体使用的类型。

why

为了更安全、更高效的复用代码。
泛型是JDK5引入的新特性,之前也可以用List(Object)实现泛华,但存在多个缺陷。改用泛型后,相对的优点:

1、在编译时检查类型,更安全。

不含泛型,加了不同类型的元素,后续使用有风险。

public static void noGeneric() {
ArrayList names = new ArrayList();
names.add("mikechen的互联网架构");
names.add(123); //编译正常
}

使用泛型,编译报错拦截。

public static void useGeneric() {
ArrayList<String> names = new ArrayList<>();
names.add("mikechen的互联网架构");
names.add(123); //编译不通过
}

2、消除了转换,更方便。因为编译时进行了类型经检查,后边使用时才不需要再强制转换,既麻烦、又不安全。

List list = new ArrayList();
list.add("hello");
String s = (String) list.get(0);

3、避免了不必要的boxing、unboxing,更性能。

HOw

泛型类

泛型接口

泛型方法

泛型通配符

泛型的实现原理

泛型本质是将数据类型参数化,它通过擦除的方式来实现,即编译器会在编译期间「擦除」泛型语法并相应的做出一些类型转换动作。

我们定义了一个泛型类,定义了一个属性成员,该成员的类型是一个泛型类型,这个 T 具体是什么类型,我们也不知道,它只是用于限定类型的。

public class Caculate<T> {
private T num;
}

反编译一下这个 Caculate 类:

public class Caculate{
public Caculate(){}
private Object num;
}

发现编译器擦除 Caculate 类后面的两个尖括号,并且将 num 的类型定义为 Object 类型。

参考

[泛型详解(用例详实,讲解明白)] https://cloud.tencent.com/developer/article/2099089
【泛型常见面试问题(查漏补缺)】 https://www.imooc.com/article/372214#:~:text=Java%E6%B3%9B%E5%9E%8B%E8%AF%A6%E8%A7%A3%E5%8F%8A%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%201%202.%20%E5%86%85%E9%83%A8%E5%B5%8C%E5%A5%97%E7%9A%84%E6%B3%9B%E5%9E%8B%E7%B1%BB%202%203.%20%E5%A4%9A%E9%87%8D%E8%BE%B9%E7%95%8C%203,%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E5%9C%A8Java%E4%B8%AD%E4%B8%8D%E8%83%BD%E5%88%9B%E5%BB%BA%E6%B3%9B%E5%9E%8B%E6%95%B0%E7%BB%84%EF%BC%8C%E4%BE%8B%E5%A6%82%EF%BC%8CT%20%5B%5D%20array%20%3D%20new%20T%20%5B10%5D%3B%20%EF%BC%9F

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词