泛型类

泛型类是有一个或多个类型参数的类。
例子:一个用来存储键/值对的简单泛型类:

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通配符。


WinRT
24 声望4 粉丝

临渊羡鱼,不如退而结网