AI智能
改变未来

Java基础之浅谈泛型


一、Java泛型

1.1为什么使用泛型

  • 今天我们来了解一下泛型的优点与不足。
  • 使用泛型,可以使我们不必在进行类型强制转换。
  • 简化了我们的代码,但是我们需要考虑用哪一种类型才比较合适
  • 让你的程序可读性更加,同时也更加的安全

1.2学会使用泛型

  • Java中通常使用变量E表示集合元素类型,K和V分别表示键和值的类型。T表示"任意类型"。
  • 这也是泛型入门的基础,学会如何使用泛型。
  • 简单定义一个泛型的类
public class Test1<T> {T age;  //定义泛型变量,泛型T就相当于基本数据类型。T first;private T second;public Test1(T age) {this.age = age;}}class B {public static void main(String[] args) {Test1<String> test1 = new Test1<>("13");//这里就体现了泛型的灵活性。我们可以传入任意的类型。Test1<Integer> test2 = new Test1<>(15);}}
  • 泛型方法
public <T> T Test2(T age) {return age;}//我们可以传入任意类型的参数

1.3泛型的继承

  • 如果我们要使用一个接口中的方法,那么我们可以利用泛型的继承来实现
public static <T extends Comparable> T Test3(T[] a){//这样就继承了Comparable的方法//但是这里的T只能使用 实现了Comparable接口的类。}
  • 你可能会好奇,Comparable不是接口吗,为什么要用extends?反正都是这么用的,记住得了。
  • 我们可以使用"&"通配符继承多个
    <T extends Comparable & List>

    我们来讨论一个继承关系:

public class Father {}class Son extends Father {public static void main(String[] args) {ArrayList<Father> list1 = new ArrayList<>();ArrayList<Son> list2 = list1;//这是错误的❌//他们两个没有任何关系}}

1.4类型擦除

  • 类型擦除就是将我们的Java代码,转换成普通代码。
  • 转换成它的顶级父类。
  • 了解吧
public class Test1<T> {T age;T first;//擦除后变成Object age;Object first;}

1.5静态与捕获异常

  • 不能再静态字段或方法中引用类型变量。
  • public static T test();//Error❌
  • 不能抛出或者捕获泛型类的实力
try{}catch(T e){//不可以O}

二、通配符概念

  • 在通配符类型中,允许类型参数发生变化。
    Pair<? extends Employee>

    表示任何泛型Pair类型,它的类型参数是Employee的子类,如Pair,但不是Pair。这个是继承方面的。

  • 通配符的超类型限定:
    <? super Manager>

    表示为Manager的所有父类。

  • 无限定通配符:
    Pair<?>
  • 额。。。。了解即可吧/(ㄒoㄒ)/~~

三、结尾

  • 对于泛型内容就总结这么多,若想深入学习等待后续更新,基础部分掌握这些足矣。如果有不足之处,希望大家多多包涵,多多支持。如果有不懂的地方可以直接私信问我,欢迎来访!
  • 我将会继续更新关于Java的学习知识,感兴趣的小伙伴可以关注一下。
  • 文章写得比较走心,用了很长时间,绝对不是copy过来的!
  • 尊重每一位学习知识的人,同时也尊重每一位分享知识的人。
  • 😎你的点赞与关注,是我努力前行的无限动力。🤩
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java基础之浅谈泛型