约定使用单字符当类型参数的名称: E — Element (used extensively by the Java Collections Framework) K — Key N — Number T — Type V — Value S,U,V etc. — 2nd, 3rd, 4th types
T (Type) 具体的Java类 E (Element)在集合中使用,因为集合中存放的是元素 K V (key value) 分别代表java键值中的Key Value N (Number)数值类型 ? 表示不确定的 Java 类型
// 是Number子类 并且实现Comparable接口
public static <T extends Number & Comparable<? super T>> int compareNumbers(T t1, T t2){return t1.compareTo(t2);}
PECS原则:生产者(Producer)使用extends,消费者(Consumer)使用super。
如果想要写值,而不需要取值则使用” ? super T “作为数据结构泛型。
public class PESC { ArrayList<? extends Animal> exdentAnimal; ArrayList<? super Animal> superAnimal; Dog dog = new Dog(“小黑”, “黑色”);
private void test() {
//正确
Animal a1 = exdentAnimal.get(0);
//错误
Animal a2 = superAnimal.get(0);
//错误
exdentAnimal.add(dog);
//正确
superAnimal.add(dog);
} }
Java Generics
Java Generics Explained
Restrictions on Generics
Java: Producer Extends, Consumer Super
Bounded Types with Generics in Java
Java 泛型中的通配符