在学泛型的时候更加关注这个问题,下面是对java核心的总结
package 泛型;
import org.junit.jupiter.api.Test;
import java.util.LinkedList;
/**
* 2022-06-22 19:38
*
* 这个例子的继承结构 Animal-> Person-> Student
*
* 通配符
* ?(正无穷,负无穷)
* ?extend a (负无穷,a]
* ?super a [a,正无穷}
* 这里的从小到大指 继承关系 从低到高
*
* 个人感觉泛型相对于多态 更加清晰、 更加快(不需要强转)、是编译时、
*/
public class GenericTest {
// 原则 赋值一定是被赋值的子类或本身。(多态)
@Test
void Test1(){
LinkedList<? super Person> list_s = new LinkedList<>();
LinkedList<? extends Person> list_e = new LinkedList<>();
// 写 :只能写入通配符的子类或者最大本身(最父)或null
list_s.add(new Student());
// list_e.add(new Person()); //报错
// 读:只能读入通配符的父类或者最小本身(最子)或Object
Animal item1 = list_e.getFirst();
// Animal item2 = list_s.getFirst(); //报错
// 在声明时 ,需要前后一致
// LinkedList l = new LinkedList(); //报错
}
}
// 泛型类、 泛型接口、 泛型方法的使用
class Person<T,K> extends Animal implements leg <K> {
T t;
Person(){}
// 泛型方法一定新声明了一个方法
<E> T show (E e){
System.out.println(e);
return t;
}
public void run(K k){
System.out.println(k);
}
}
interface leg <K> {
void run(K k);
}
class Student <T,K> extends Person<T,K>{}
class Animal{}
//调用,方法名前声明泛型
new c(). <Integer>a(00);