泛型
package com.bilibili;
/**
* @author WangYH
* @version 2021.1.3
* @date 2023/4/19 13:31
*/
public class Score <T,U>{
String name;
U id;
T value;
public Score(String name, U id, T value) {
this.name = name;
this.id = id;
this.value = value;
}
public T getValue() {
return value;
}
}
package com.bilibili;
import java.util.Scanner;
/**
* @author WangYH
* @version 2021.1.3
* @date 2023/4/7 15:19
*/
public class Main {
public static void main(String[] args) {
//泛型定义初始化
//使用时,才来定义,泛型
Score<String,Integer> score = new Score<>("高等数学",001,"优秀");
//待定类型不能实例化,因为其类型不明确,无法调用构造方法
//静态内容无法使用泛型,而且泛型只能是确定一个泛型,只能是一个引用类型
//不能用基本类型,只能使用其包装类
//泛型方法
//如果需要泛型有一个类型的限制,用到泛型界限的知识,比如泛型中,要是只能填数字,可以写成
//T<T extends Number>
//通配符:?,可以接受任何类型,后面也可以跟上限,限制父类
//同样,泛型也有下界限制,但是只能用在通配符中,其他地方不行
//下界表示其子类不可再使用
//<? super Object>
//泛型类型会被擦除,编译时成为Object类型,具体使用时再来明确
//泛型类继承重写父类方法时,会一并重写一个桥接方法,调用满足类型的对应子类方法
//类型擦除机制方便后面使用集合类,避免过多的类型转换,同时也是Java向下兼容的体现,所以泛型使用才会加上一些限制
//限制一 类型判断时,泛型只允许是原始类型,Object或者是定义的界限
//限制二 不支持创建参数化数组,只能是其原始类型,即未被指明类型的数组
//
}
public static <T> T test(T t1) {
//方法会在使用的时候自动明确类型
return t1;
}
}