package generic; import java.util.ArrayList; import java.util.Collection; public class TestOne { @SuppressWarnings("unchecked") public static void main(String[] args) { // TODO Auto-generated method stub //8.6约束和局限性 //8.6.1不能用基本类型实例化类型参数 //8.6.3 不能创建参数化类型的数组 // Pair<String> [] pair = new Pair<String>[2]; //error // Pair<String>[] pair =null; //合法的 Pair<String>[] pair = (Pair<String>[]) new Pair<?>[2];//声明通配型的数组进行转换,不安全 pair[0] = new Pair<String>(); //pair[1] = new Pair<Employee>(); //收集参数化类型对象 ArrayList 比较好 // ArrayList<Pair<String>> pair = new ArrayList<Pair<String>>(); //8.6.4 Varargs警告 //向参数可变的方法传递一个可变的实例 泛型数组 Collection<Pair<String>> collection = null; Pair<String> pair1 = null; Pair<String> pair2 = null; // addAll(collection, pair1,pair2); // 一般用 @SuppressWarnings("unchecked") javase 7 可用 @SafeVarargs Pair<String> [] pairArr = array(pair1,pair2); Object[] arr = pairArr; arr[0] = new Pair<Employee>(); } //8.6.4 @SafeVarargs public static <T> void addAll(Collection<T> collection, T ... ts ){ for(T t : ts ){ collection.add(t); } } public static <E> E[] array(E ... array){ return array; } }