[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符

news/2024/9/9 13:42:17

🌈键盘敲烂,年薪30万🌈

目录

泛型的基础知识:

♥A 泛型的好处:

♠A 泛型擦除:

♣A 泛型的小细节:

泛型的使用:

①泛型类:

②⭐泛型接口:

③泛型方法:

泛型的通配符


泛型的基础知识:

♥A 泛型的好处:

  • 统一数据类型。
  • 把运行时期的问题提前到了编译期间,避免了强制类型转换可能出现的异常。

♠A 泛型擦除:

为什么java中的泛型是伪泛型❓

例如:把数据存入String类的一个集合里

- 编译器会进行泛型检查,如果不是String,你的代码下面会出现~~~(编译错误)

                                           ,如果是String类,强转为Object类存到集合里

- 将Object类转换为对应得数据类型


♣A 泛型的小细节:

  • 泛型中不能写基本数据类型
  • 指定泛型得具体类型后,可传入该类型得子类
  • 如果不写泛型,默认Object

 

泛型的使用:

①泛型类:

如果定义一个类时,类型不确定,可以定义为泛型

public class MyArrayList<E>{private Object[] Obj = new Object[10];private int size = 0;public void add(E val){Obj[size++] = val;}}
public class Demo1{public static void main(String[] args){MyArrayList<Integer> list = new MyArrayList();list.add(1);}
}

②⭐泛型接口:

  • 实现类指定类型
public class MyList Implements List<String>{// 重写List的所有抽象方法public void add(String e){……}
}
  • 实现类继续沿用泛型
public class MyList<E> Implements List<E>{public void add(E e){……}
}

③泛型方法:

当类中只有一个方法的类型不确定时,可使用泛型方法

public class Demo1{public static void main(String[] args){MyArrayList<Integer> list = new MyArrayList();ListUtil.addAll(list, 1, 2, 3);}class ListUtil{public static<E> void addAll(ArrayList<E> list, E e1, E, e2, E e3){list.add(e1);list.add(e2);list.add(e3);}    }
}

泛型的通配符

泛型不具备继承性!!!

本方法不确定类型,但是只想要继承结构里面的对象!!!

? extends E 

表示可以传递E和E的子类

? super E

表示可以传递E和E的父类

public static void method(ArrayList<? extends YE> e){……}public static void method(ArrayList<? super YE> e)(……)

📕总结:

泛型提供了编译时类型检查,避免了在运行时出现类型转换错误。这确保了代码的类型安全性,并在编译时捕获错误。

通配符可以使用上限和下限来限制泛型的范围。<? extends T>表示类型是T或T的子类,<? super T>表示类型是T或T的父类。

Java中的泛型在编译后会被擦除


https://www.xjx100.cn/news/3091561.html

相关文章

「Verilog学习笔记」ROM的简单实现

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 分析 要实现ROM&#xff0c;首先要声明数据的存储空间&#xff0c;例如&#xff1a;[3:0] rom [7:0]&#xff1b;变量名称rom之前的[3:0]表示每个数据具有多少位&#xff0…

1. 基础语法

文章目录 一些基本的概念JDK 和JREJava语言的编译原理编译器和jdk的安装 编译器的基础介绍新建项目的规范src文件介绍src规范强调包 ModuleIJ的一些特殊的操作分屏写代码去掉代码提示的大小写限制注释设置文件编码设置 设置回车快捷键 Java语法基本概念关键字修饰符 与 非修饰符…

串口工作流程硬核解析,没有比这更简单的了!

串口通信,就是我们常说的串口通讯,是一种短距离、点对点的数据传输方式。它基于串行通信协议,通过串口线连接设备进行数据交互。串口在很多硬件系统中广泛使用,是工控机、单片机、外设设备之间信息交换的重要接口。 那串口是怎么工作的呢?我们举个形象的例子。假设A和B是两台…

C语言——深入理解指针——函数指针

一、函数指针变量 1.1 函数指针变量的创建 什么是函数指针变量呢&#xff1f; 函数指针变量应该是用来存放函数地址的&#xff0c;未来通过地址能够调⽤函数的。 那么函数是否有地址呢&#xff1f; 我们做个测试&#xff1a; #include <stdio.h> void test() {print…

[架构之路-247]:目标系统 - 设计方法 - 软件工程 - 结构化方法的基本思想、本质、特点以及在软件开发、在生活中的应用

目录 前言&#xff1a; 一、什么是非结构化方法 1.1 什么是非结构化方法 1.2 非结构化方法的适用场合 二、什么是结构化方法 1.1 结构化方法诞生的背景&#xff1a;软件规模发展&#xff1a;大规模、复杂系统的需要 1.2 概述 1.3 主要特点与核心思想 三、结构化方法在…

VScode调试没有反应

点击调试按钮后没反应 有可能是vscode中安装的python插件版本问题 可以通过重新安装比较旧一点的python尝试解决此问题 步骤如下&#xff1a; 然后从中选择比当前版本更低的版本即可 安装完成后需重启vscode

HarmonyOS从基础到实战-高性能华为在线答题元服务

最近看到美团、新浪、去哪儿多家互联网企业启动鸿蒙原生应用开发&#xff0c;这个HarmonyOS NEXT越来越引人关注。奈何当前不面向个人开发者开放&#xff0c;但是我们可以尝试下鸿蒙新的应用形态——元服务的开发。 元服务是基于HarmonyOS提供的一种面向未来的服务提供方式&…

如何使用无代码系统搭建软件平台?有哪些开源无代码开发平台?

无代码是什么 无代码开发&#xff0c;也称为零代码&#xff08;Zero Code&#xff09;开发&#xff0c;是一种技术概念。无代码开发无需代码基础&#xff0c;适合业务人员、IT开发及其他各类人员使用。他们通过无代码开发平台快速构建应用&#xff0c;并适应各种需求变化&#…