泛型,深入浅出,一看就懂!

Java引入泛型主要为了解决减少代码错误和提高代码复用。泛型在编译时检查类型,防止不兼容,同时允许创建泛型方法和泛型类以处理不同类型的数组或集合,如示例中的`reverse`方法。在编译后,泛型会被擦除,转换为具体类型,JVM并不直接支持泛型。
摘要由CSDN通过智能技术生成

为什么需要泛型

Java引入泛型的主要解决的问题有两个:减少代码错误和代码复用。

减少代码错误

集合在使用时只接受指定类型(示例类型为String)的对象时,如果不使用泛型在运行的时候才会暴露出错误。示例如下:
image.png
为了解决上面的问题,Java引入了泛型,泛型会在编译时期就对添加的元素进行检查,如果类型不匹配,在编译的时候就会暴露出问题。示例如下:
image.png

代码复用

假设有2个需求:

  1. 接收String类型的数组,颠倒数组中所有元素。
  2. 接收Integer类型的数组,颠倒数组中所有元素。

在JDK1.5之前,实现上述两个需求我们需要写以下两个方法:

public static void reverses(String[] arr1) {
    for (int i = 0; i < arr1.length / 2; i++) {
        String temp = arr1[i];
        arr1[i] = arr1[arr1.length - i - 1];
        arr1[arr1.length - i - 1] = temp;
    }
}

public static void reverses(Integer[] arr1) {
    for (int i = 0; i < arr1.length / 2; i++) {
        Integer temp = arr1[i];
        arr1[i] = arr1[arr1.length - i - 1];
        arr1[arr1.length - i - 1] = temp;
    }
}

在JDK1.5之后,实现上述两个需求只需要写一个方法

public static <T> void reverses(T[] arr1) {
    for (int i = 0; i < arr1.length / 2; i++) {
        T temp = arr1[i];
        arr1[i] = arr1[arr1.length - i - 1];
        arr1[arr1.length - i - 1] = temp;
    }
}

显而易见,使用泛型可以提高代码的复用性

如何使用泛型

  • 泛型方法(Generic Methods):
    • 声明方式:写在返回值之前
    • 语法示例:public <T> void genericMethod(T value) {}
    • 使用方式:在调用泛型方法时,可以明确指定实际的类型参数,也可以通过类型推断自动推导
  • 泛型类(Generic Classes):
    • 声明方式:在类名后面使用尖括号(<>)定义泛型参数
    • 语法示例:public class GenericClass<T> {}
    • 使用方式:在创建泛型类的实例时,可以明确指定实际的类型参数,也可以通过类型推断自动推导

总结:

  1. 需要注意的是,泛型方法和泛型类可以同时使用,即在泛型类中可以定义泛型方法,而且泛型方法的类型参数可以与泛型类的类型参数不同。
  2. 另外,泛型方法和泛型类可以搭配使用,例如在泛型类中定义泛型方法,或在泛型方法中使用泛型类作为参数或返回类型。
  3. 使用泛型方法和泛型类可以使代码更加通用和灵活,能够处理不同类型的数据,提高代码的可复用性和类型安全性。

什么是泛型

我记忆泛型的方法是:泛可以理解为通用,型就是类型。所以泛型也可记为通用的类型。

泛型擦除

泛型在编译之后,就消失了,它是JDK的语法糖。另外JVM是感知不到泛型的存在的,在.java -> .class文件的过程中,泛型就被编译成具体的类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayden 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值