泛型(Generic)

泛型是爲了在限制在集合中的數據類型。將運行時的可能發生的異常轉化爲編譯時的異常。 java

例子,利用Map的泛型 spa

@Test
    public void test1(){
        Map<String,String> map = new HashMap<String,String>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");

        Set<Map.Entry<String,String>> entries = map.entrySet();
        for (Map.Entry<String,String> set: entries){
            String key = set.getKey();
            String value = set.getValue();
            print(key+" : "+ value);
        }
    }


泛型的聲明正確性 code

泛型聲明必須是引用類型,不能是基本的數據類型。 get

正常的聲明方法:若是兩邊都是用到了泛型,兩邊都必須同樣。 虛擬機


List<Person> persons = new ArrayList<Person>();

錯誤的聲明 編譯


List<Person> persons = new ArrayList<Object>();
List<Object> persons = new ArrayList<Person>();
因爲要兼容歷史上沒有泛型因此容許兩邊其中有一邊沒有泛型



List<Person> persons = new ArrayList();
List persons = new ArrayList<Person>();
緣由是當傳入一個不帶泛型和帶泛型方法的時候,這兩種狀況都必須兼容
public void test3(List<String> name){
}

public void test4(List name){
}


泛型擦除,泛型只是檢查編譯時候的問題,而在進入java虛擬機的時候會編譯完成class中沒有了泛型。執行效率不會被影響。 class

List<E>中的E爲類型參數變量 test

List<String>中的String爲實際參數變量 效率

整個稱爲List<E>泛型類型。 泛型

整個稱爲List<String>參數化類型


泛型定義

須要先聲明再定義

static得在聲明以前<T>,這種聲明方法只在方法內有效。

public class Generic { public <T> T test(T t){ return t; } }
//這種方法能夠在類上面生聲明好全局須要用的屬性
public class Generic<S extends Integer ,Y,F> {
    public static <T extends String> T test(T t){
        return t;
    }


    public void test2(S s,Y y,F f){
    }
}
相關文章
相關標籤/搜索