数据结构:泛型

网友投稿 688 2022-10-19

数据结构:泛型

数据结构:泛型

一、泛型

1.1、泛型介绍:

什么是“泛型”???“泛型”的作用是什么???

我们都知道 Object 是所有类的父类,因此我们可以设置一个 Object 数组来接收所有的类,并设置相对应的数据类型从这个 Object 数组里面获取到相对应类型的元素。理论上来说是可以的:::

当我们完成上述代码并运行时会发现:类型不匹配的问题!这就是因为虽然我们知道下标为 0 的元素是 String类型的“hello”,但对于这个数组来说存放的不止 String 一种类型,所以系统无法判定是否正确。因此要想解决这种问题只需要 强制类型转换 即可:

此时就不会再报错。但是这种办法更为麻烦:因此就会引入 “泛型”

class NewMyArray{ public T[] array = (T[]) new Object[10]; //给数组设置元素 public void setArray(int pos,T val){ array[pos] = val; } //取出数组元素 public T getArray(int pos){ return array[pos]; }}public class Test2 { public static void main(String[] args) { NewMyArray myArray = new NewMyArray<>(); myArray.setArray(1,20); Integer num = myArray.getArray(1); System.out.println(num); }}

上述代码就简单的实现了一个 泛型类 ,

​​class NewMyArray​​这里的 表示 占位符:表示当前类是一个泛型类;​​NewMyArray myArray = new NewMyArray<>();​​NewMyArray后面要指定类型,但是后面则不需要加,因为后面可以根据前面的类型来推导;不需要强制类型转换;

1.2、擦除机制

在 泛型代码 编译的过程中会将所有的 T类型 都转换为 Object类型 ,这就是“擦除机制”。

这里还涉及到​​T[] t = new T[10]​​​为什么会报错呢?难道不是等同于​​Object[] object = new Object[10]​​吗?

这里就涉及到 “擦除机制” ,因为在代码编译的时候 T类型 会被擦除为 Object类型 然而在返回的时候: Object数组 里面存放的一定是 Integer类型 的吗???因此在这里如果直接用 Integer类型数组 接收编译器认为是不安全的

1.3、泛型上界

在“寻找数组最大值”的代码里面​​if(max < array[i])​​代码报错:这是因为代码在编译时 T类型被擦除为了 Object类型 ,但是 Object 没有实现 Comparable 的接口,因此在这里就不能对当前类进行 implements 操作。由此就引出 “泛型上界”:通过对类型的边界进行约束,

通过 extends 来实现 Comparable 使两个数据进行比较:而对于其他数据来说:只要实现了 Comparable 接口,都可以调用这个方法。

在新创建的Person类里面,因为 Person 实现了 Comparable接口 ,因此在findMax方法可以接收这个类型。

1.4、通配符

这里使用 通配符 就可以传递任何参数。

1.4.1、通配符上界 与 下界

上界:​​​​:不能写入数据,只能读取数据

下界:​​​​:不能读取数据,只能写入数据

1.5、包装类

装箱:

public class TestDemo5 { public static void main2(String[] args) { //拆箱:将 Integer 类型放在 基本类型里面 Integer a = 20; //自动拆箱: int b = a; //手动拆箱: int c = a.intValue(); double d = a.doubleValue(); } public static void main1(String[] args) { //装箱:将 i 的值放在 a 中 int i = 10; //自动装箱: Integer a = i; //手动装箱: Integer b = Integer.valueOf(i); }}

上述代码中出现的问题是为什么???

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringCloud Feign请求头删除修改的操作代码
下一篇:BSF.Aop- 静态 Aop 织入框架
相关文章

 发表评论

暂时没有评论,来抢沙发吧~