泛型类
泛型类是有一个或多个类型参数的类。
例子:一个用来存储键/值对的简单泛型类:
class Entry<K, V>{
private K key;
private V value;
public Entry(K key, V value){
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public void setKey(K key) {
this.key = key;
}
public V getValue() {
return value;
}
public void setValue(V value) {
this.value = value;
}
}
泛型方法
泛型方法是带类型参数的方法。
定义泛型方法。泛型方法是带类型参数的方法。
定义的格式为: 修饰符 参数类型<T> 方法返回值类型 方法名(形参列表),其中定义参数类型可以是多个。
public static <T> void swap(T[] array, List<T> elems){}
类型限定
你可以对类型做出限定,要求该类型继承某些类或者实现某些接口,类型限定中extends关键字的实际意思是"子类型"。
如你所愿,你可以有多个接口限定,但最多只能有一个是类。如果有一个限定是类,则它必须放在限定列表的第一位。
例如:类型限定 "extends AutoCloseable"确保元素类型是AutoCloseable的子类型。
public static <T extends AutoCloseable> void swap(List<T> elems) throws Exception{
for(T elem : elems) elem.close();
}
通配符简单描叙
子类型通配符:
//? extends Employee代表任意一个Employee的子类型
public static void printNames1(List<? extends Employee> elems) throws Exception{
}
父类型通配符:
//? super Employee代表任意一个Employee的一个父类型
public static void printNames2(List<? super Employee> elems) throws Exception{
}
可以采用通配符的"PECS"助记码:生产者(producer)用extends。消费者(consumer)用super。如果从ArrayList读取值,就是生产者,你应该用extends通配符。你把值给Predicate用于测试,那就是消费者,你就用super通配符。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。