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

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

🌈键盘敲烂,年薪30万🌈



泛型的基础知识:

♥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中的泛型在编译后会被擦除

相关文章
|
9天前
|
安全 Java
Java之泛型使用教程
Java之泛型使用教程
111 10
|
11天前
|
Java 开发者
Java 函数式编程全解析:静态方法引用、实例方法引用、特定类型方法引用与构造器引用实战教程
本文介绍Java 8函数式编程中的四种方法引用:静态、实例、特定类型及构造器引用,通过简洁示例演示其用法,帮助开发者提升代码可读性与简洁性。
|
2月前
|
算法 Java
Java语言实现链表反转的方法
这种反转方法不需要使用额外的存储空间,因此空间复杂度为,它只需要遍历一次链表,所以时间复杂度为,其中为链表的长度。这使得这种反转链表的方法既高效又实用。
193 0
|
2月前
|
存储 Java 数据处理
Java映射操作:深入Map.getOrDefault与MapUtils方法
结合 `getOrDefault`方法的简洁性及 `MapUtils`的丰富功能,Java的映射操作变得既灵活又高效。合理地使用这些工具能够显著提高数据处理的速度和质量。开发人员可以根据具体的应用场景选择适宜的方法,以求在性能和可读性之间找到最佳平衡。
103 0
|
Java API 容器
Java泛型的继承和通配符
Java泛型的继承和通配符
91 1
|
安全 Java API
Java一分钟之-泛型通配符:上限与下限野蛮类型
【5月更文挑战第19天】Java中的泛型通配符用于增强方法参数和变量的灵活性。通配符上限`? extends T`允许读取`T`或其子类型的列表,而通配符下限`? super T`允许向`T`或其父类型的列表写入。野蛮类型不指定泛型,可能引发运行时异常。注意,不能创建泛型通配符实例,也无法同时指定上下限。理解和适度使用这些概念能提升代码的通用性和安全性,但也需兼顾可读性。
205 3
|
Java Go
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
111 0
|
安全 Java 编译器
「 Java基础-泛型 」一篇文章说清楚Java泛型中的通配符T、E、K、V、N、?和Object的区别与含义
Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许开发者在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。 可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。
「 Java基础-泛型 」一篇文章说清楚Java泛型中的通配符T、E、K、V、N、?和Object的区别与含义
java202303java学习笔记第三十一天泛型通配符和综合练习1
java202303java学习笔记第三十一天泛型通配符和综合练习1
92 0
java202303java学习笔记第三十一天泛型通配符和综合练习1
java202303java学习笔记第三十一天泛型通配符和综合练习1
76 0