Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符(2)

简介: Java进阶:【泛型】认识泛型,泛型方法,泛型类,泛型接口和通配符(2)

泛型方法

什么是泛型方法,不是带泛型的方法就是泛型方法,泛型方法有要求:这个方法的泛型参数类型要和当前类的泛型方法的泛型无关

换个角度:泛型方法对应的那个泛型参数类型和当前所在的这个类,是否为泛型类,泛型是啥,无关

泛型方法定义的时候,前面要加上t,原因如果不加的话,会把t当作一种数据类型,然而代码中没有t类型那么就会报错

t的类型实在调用方法的时候确定的

泛型方法是否是静态方法?可以是

代码类型:

public class test02<e> {
    public  void a(e e){
    }
    public static <T>  void b(T t){
    }
static class Demo{
    public static void main(String[] args) {
        test02<String> t2 = new test02();
        t2.a("1");
        t2.b("abc");
    }
}


泛型参数存在继承的情况

前面两个引用类型,都可以赋值,为什么list不行?


其实我们用的Arraylist,他的底层是一个Obj类型的数组,我们的泛型负责在编译的时候限制类型,


例子:两个类,a,b两类,a是b的父类,两者是继承关系,但是 G ,G两者不存在继承关系,应为他们都是引用Arraylist所以是同级关系

1.png



通配符

当我想要重载不同泛型的list时,常见的重载无法让我们完成需求,于是我们需要通配符


在没有通配符的情况下,下面a方法,相当于重复定义

2.png


通配符是什么?

3.png



发现:两个类,a,b两类,a是b的父类,两者是继承关系,但是 G< a> ,G< b>两者不存在继承关系,应为他们都是引用Arraylist所以是同级关系但是使用了通配符后,我们发现G<?>变成了G< a> ,G< b>的父类


使用通配符

无边界通配符( ?),固定上边界通配符(?extends 上界类),固定下边界通配符(?super 下界类)


学习主要就是为了方便查看API文档


4.png


使用小细节


public  void  a(List<?> list){
//    遍历
    for (Object o : list) {
        System.out.println(o);
    }
//    数据的写入操作
//    list.add("abc");--》出错,不能随意的写入
//    读取操作
    Object s  = list.get(0);
}

泛型受限

并列关系,我们如何限制类型,


用extends的是本类和类所有的子类:定义上限

用super是本类和本类的父类,定义下限

5.png

       List<Object> a = new ArrayList<>();

       List<Person> b = new ArrayList<>();

       List<Student> c = new ArrayList<>();


A,B,C三个泛型的类型不相同,Person是Student的父类


相关文章
|
1月前
|
安全 Java 开发者
Java中WAIT和NOTIFY方法必须在同步块中调用的原因
在Java多线程编程中,`wait()`和`notify()`方法是实现线程间协作的关键。这两个方法必须在同步块或同步方法中调用,这一要求背后有着深刻的原因。本文将深入探讨为什么`wait()`和`notify()`方法必须在同步块中调用,以及这一机制如何确保线程安全和避免死锁。
44 4
|
1月前
|
Java
深入探讨Java中的中断机制:INTERRUPTED和ISINTERRUPTED方法详解
在Java多线程编程中,中断机制是协调线程行为的重要手段。了解和正确使用中断机制对于编写高效、可靠的并发程序至关重要。本文将深入探讨Java中的`Thread.interrupted()`和`Thread.isInterrupted()`方法的区别及其应用场景。
38 4
|
29天前
|
Java 数据处理 数据安全/隐私保护
Java处理数据接口方法
Java处理数据接口方法
26 1
|
6月前
|
Java API 容器
Java泛型的继承和通配符
Java泛型的继承和通配符
41 1
|
7月前
|
安全 Java API
Java一分钟之-泛型通配符:上限与下限野蛮类型
【5月更文挑战第19天】Java中的泛型通配符用于增强方法参数和变量的灵活性。通配符上限`? extends T`允许读取`T`或其子类型的列表,而通配符下限`? super T`允许向`T`或其父类型的列表写入。野蛮类型不指定泛型,可能引发运行时异常。注意,不能创建泛型通配符实例,也无法同时指定上下限。理解和适度使用这些概念能提升代码的通用性和安全性,但也需兼顾可读性。
73 3
|
7月前
|
Java 编译器
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符
[java进阶]——泛型类、泛型方法、泛型接口、泛型的通配符
|
7月前
|
Java Go
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
【Java 泛型方法】泛型方法的定义和使用,泛型的通配符和泛型的上下限,泛型的注意事项
java202303java学习笔记第三十一天泛型通配符和综合练习1
java202303java学习笔记第三十一天泛型通配符和综合练习1
57 0
java202303java学习笔记第三十一天泛型通配符和综合练习1
java202303java学习笔记第三十一天泛型通配符和综合练习1
46 0
java202303java学习笔记第三十一天泛型通配符和综合练习4
java202303java学习笔记第三十一天泛型通配符和综合练习4
49 0