泛型是为了在限制在集合中的数据类型。将运行时的可能发生的异常转化为编译时的异常。
例子,利用Map的泛型
@Test public void test1(){ Mapmap = new HashMap (); map.put("key1","value1"); map.put("key2","value2"); map.put("key3","value3"); Set > entries = map.entrySet(); for (Map.Entry set: entries){ String key = set.getKey(); String value = set.getValue(); print(key+" : "+ value); } }
泛型的声明正确性
泛型声明必须是引用类型,不能是基本的数据类型。
正常的声明方法:如果两边都是用到了泛型,两边都必须一样。
Listpersons = new ArrayList ();
错误的声明
List由于要兼容历史上没有泛型所以允许两边其中有一边没有泛型persons = new ArrayList
List原因是当传入一个不带泛型和带泛型方法的时候,这两种情况都必须兼容persons = new ArrayList();List persons = new ArrayList ();
public void test3(Listname){}public void test4(List name){}
泛型擦除,泛型只是检查编译时候的问题,而在进入java虚拟机的时候会编译完成class中没有了泛型。执行效率不会被影响。
List<E>中的E为类型参数变量
List<String>中的String为实际参数变量
整个称为List<E>泛型类型。
整个称为List<String>参数化类型
泛型定义
需要先声明再定义
static得在声明之前<T>,这种声明方法只在方法内有效。
public class Generic { publicT test(T t){ return t; }}
//这种方法可以在类上面生声明好全局需要用的属性public class Generic{ public staticT test(T t){ return t; } public void test2(S s,Y y,F f){ }}