当前位置: 首页 > article >正文

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


http://www.kler.cn/a/440727.html

相关文章:

  • Java性能调优 - JVM性能监测及调优
  • React Native学习路线图
  • 计算机组成原理(八):加法器
  • ps案例制作
  • centos使用mkisofs构建无人值守镜像(附官方学习文档)
  • python webdriver-manager 实现selenium 免下载安装webdriver
  • 51c视觉~合集31
  • 【C++】红黑树(万字)
  • 【AIStarter】3.2.1版本更新:告别Bug,提升用户体验
  • 前端(七)定位流
  • 单片机:实现utf-8转gb2312(附带源码)
  • 银河麒麟桌面操作系统添加WPS字体
  • 如何在 Ubuntu 上安装 OpenSearch 开源的搜索引擎
  • BGP-面试
  • Zookeeper其二,zk的java和选举机制,Hadoop的高可用和联邦机制
  • c++ multimap
  • TCP小队列与WiFi聚合
  • 计算机网络 | 5.传输层
  • 【功能安全】随机硬件失效导致违背安全目标的评估(FMEDA)
  • 【docker】dockerfile add或者copy的文件 /entrypoint.sh: no such file or directory