JavaSE23-泛型

一、概述

  • 泛型可以把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型 。
  • 相当于把数据类型作为参数来进行传递。
  • 注意:泛型只能是引用数据类型

二、泛型类 & 泛型接口

1、定义泛型

  1. 泛型类和泛型接口的用都相同。
  2. 泛型类就是把泛型定义在类上,用户使用该类的时候,才把类型明确下来 。
  3. 在类名后加<>,在<>中定义泛型,<>中的内容相当于泛型的名字,可以随便写。在泛型类中我们可以把这个泛型的名字当做一个数据类型来使用。

2、使用泛型

在泛型类中可以使用在类名后面定义的泛型。

public class TestClass<T> {
    public void test(T t){
       
    }
}

3、泛型的确定

3.1 创建对象时确定

   public static void main(String[] args) {
        TestClass<String>  t = new TestClass();//指定了该对象的泛型T是String类型
        t.test("三更草堂");//所以test方法的参数类型应该也是String类型
    }

3.2 定义子类时确定

// 这样在子类SubClass中泛型就确定为String类型了。

public class SubClass extends TestClass<String> {
    @Override
    public void test(String s) {
        
    }
}

注意:我们在定义子类时也可以选择不确定泛型,让其在创建对象的时候在确定。写法如下

public class SubClass<T> extends TestClass<T> {
    @Override
    public void test(T t) {
        super.test(t);
    }
}

三、泛型方法

1、定义泛型

  1. 方法返回值类型的前面加<>,在<>中定义泛型,<>中的内容相当于泛型的名字,可以随便写。
  2. 在该泛型方法中我们可以把这个泛型的名字当做一个数据类型来使用。
    public static  <T> T test(T t){
        return t;
    }

2、使用泛型

在泛型方法中可以使用定义的泛型。并且我们一般是在参数列表中或者是返回值类型上使用到这个泛型。

    public static  <T> T test(T t){
        return t;
    }

3、泛型的确定

  • 在调用泛型方法的时候才真正确定之前定义的泛型代表什么数据类型。
  • 在调用泛型方法的时候,程序会根据你的调用自动推导泛型的具体类型。
    public static void main(String[] args) {
        Integer test = test(1);
        String s = test("三更草堂");
    }

四、泛型上限 & 泛型下限

1、泛型限定的概念

我们在使用确定泛型的时候可以使用任意的引用数据类型去确定。但是在某些场景下我们要求这个泛型必须是某个类的子类或者是某个类的父类。这种情况下我们就需要用到泛型上限和泛型上限来限制泛型的范围。

2、泛型上限

  1. 限制泛型必须是某个类或者是其子类。
  2. 泛型上限可以在定义泛型类和方法参数上使用
 <? extends 具体的类型>
 
 // 这样我们再调用test方法的时候只能存入泛型为Person或者是Person子类的List集合对象。
 public static void test(List<? extends Person> t){

}

public class Box<E extends Person> {
    E e;
}

3、泛型下限

  1. 限制泛型必须是某个类或者是其父类。
  2. 泛型下限主要在方法参数上使用。
<? super 具体的类型> 

// 调用test方法的时候只能存入泛型为Student或者是Student父类的List集合对象。
public static  void test(List<? super Student> t){

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值