2015年10月13日 星期二

泛型方法

※基本

public static void main(String[] args) {
    new Test().<String>xxx("");
    new Test().xxx("");
}
    
private <T> void xxx(T t) {}
    
private <T extends Xxx, U extends String, V extends Animal &Ooo & Oooo> void xxx(T t, U u, V v) {}

※宣告時,寫在回傳值的左邊,而T是隨便打的,反正就是一個型態,型態是什麼由呼叫者決定

※宣告後可以不用,不會出現錯誤或警告,此例使用在參數

※可以在呼叫方法的左邊寫泛型,可以確定是什麼型態,但不寫也不會出現錯誤或警告

※&只能寫在泛型類別和泛型方法,像 List 是不行的
在 & 的右邊只能放 interface,這句話表示 V 必需是 Animal 的子類且還需 implements Ooo 和 Oooo 兩個 interface
.「,」隔開每一個自定的泛型名稱,不能重覆用,如 第一個已經用 T 了,後面就不能用 T 了



※集合

public static void main(String[] args) {
    List<Integer> list = new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    
    new Test().<Integer>xxx(list);
    new Test().xxx(list);
}
    
private <T> void xxx(List<T> t) {
    for(T tt:t) {
        System.out.println(tt);
    }
}

※呼叫時的泛型寫的不是 List,而是 List 裡的型態,因為泛型方法的參數 T 在 List 裡,也就是說它只管泛型的部分

沒有留言:

張貼留言