泛型(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){
    }
}
相关文章
相关标签/搜索