泛型 初识

目录

泛型认识

类泛型使用

类型通配符

类型通配符上下限

 类型擦除


泛型认识

java 中泛型标记符:

E - Element (在集合中使用,因为集合中存放的是元素)
T - Type(Java 类)
K - Key(键)
V - Value(值)
N - Number(数值类型)
? - 表示不确定的 java 类型

好处

1适用于多种数据类型执行相同的代码(代码复用)
2 泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)

类泛型使用

接口与类相同

package com.zhang;

import java.util.ArrayList;
import java.util.Random;

/**
 * @Description TODO
 * @Author 小乌龟
 * @Date 2022/2/11 15:22
 */

public class Test {

    @org.junit.jupiter.api.Test
     void Dome() {
        //可以定义不同的类型
        Box<Integer> integerBox = new Box<Integer>();
        Box<String> stringBox = new Box<String>();

        integerBox.add(10);
        stringBox.add("String");
        integerBox.print("23","24",43);

        System.out.println(integerBox.get().toString());
        System.out.println("==========");
        System.out.println(stringBox.get());
    }

}
 class Box<T> {

    private T t;

    public void add(T t) {
        this.t = t;
    }
//    成员方法
    public T get() {
        return t;
    }
    //泛型方法
    //方法独立与类而产生变化 泛型方法可变为static
    public  <E> E getBox(ArrayList<E> list){
        return list.get(new Random().nextInt(list.size()));
    }
//    泛型方法与可变参数
    public <T> void print(T... e){
        for (T el:e) {
            System.out.println(el);
        }
    }



}

结果:

定义格式
修饰符 interface接口名<代表泛型的变量> {  }

看一下下面的例子,你就知道怎么定义一个泛型接口了:
/**
 * 定义一个泛型接口
 */
public interface Test<T> {
 public abstract void add(T t); 
}

 

类型通配符

类型通配符一般是使用 ? 代替具体的类型参数。例如 List<?> 在逻辑上是 List<String>,List<Integer> 等所有 List<具体类型实参> 的父类。

public class Test {
    public static void getData(List<?> data) {
        System.out.println("data :" + data.get(0));
    }

    @org.junit.jupiter.api.Test
     void Dome() {
        List<String> name = new ArrayList<String>();
        List<Integer> age = new ArrayList<Integer>();
        List<Number> number = new ArrayList<Number>();

        name.add("icon");
        age.add(18);
        number.add(314);

        getData(name);
        getData(age);
        getData(number);

    }

}

结果:

类型通配符上下限

泛型的上限

  • 格式: 类型名称 <? extends 类 > 对象名称
  • 意义: 只能接收该类型及其子类

泛型的下限

  • 格式: 类型名称 <? super 类 > 对象名称
  • 意义: 只能接收该类型及其父类型
class Animal{}//父类
​
class Elephant extends Animal{}//子类
​
class Tiger  extends Animal{}//子类

class BigTiger extends Tiger{} 


//使用
ArrayList<? extends Animal> list = new ArrayList<Animal>();

 类型擦除

 

 

  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

新生代农民工-小王八

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

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

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

打赏作者

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

抵扣说明:

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

余额充值