泛型 初识

目录

泛型认识

类泛型使用

类型通配符

类型通配符上下限

 类型擦除


泛型认识

泛型 初识_第1张图片

泛型 初识_第2张图片

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 integerBox = new Box();
        Box stringBox = new Box();

        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 {

    private T t;

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



}

结果:

泛型 初识_第3张图片

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

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

泛型 初识_第4张图片

泛型 初识_第5张图片

 

类型通配符

类型通配符一般是使用 ? 代替具体的类型参数。例如 List 在逻辑上是 List,List 等所有 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 name = new ArrayList();
        List age = new ArrayList();
        List number = new ArrayList();

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

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

    }

}

结果:

泛型 初识_第6张图片

类型通配符上下限

泛型的上限

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

泛型的下限

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

class BigTiger extends Tiger{} 


//使用
ArrayList list = new ArrayList();

泛型 初识_第7张图片

 类型擦除

泛型 初识_第8张图片

 泛型 初识_第9张图片

 泛型 初识_第10张图片

泛型 初识_第11张图片  

你可能感兴趣的:(java,泛型)