interface List 和 class GenTest 其中,T,K,V不代表值,而是表示类型。这里使用任意字母都可以。 常用T表示,是Type的缩写。
泛型的实例化
一定要在类名后面指定类型参数的值(类型)。如: List strList = new ArrayList(); Iterator iterator = customers.iterator();
T只能是类,不能用基本数据类型填充。但可以使用包装类填充
把一个集合中的内容限制为一个特定的数据类型,这就是generics背后的核心思想
// jdk5之前Comparable c =newDate();System.out.println(c.compareTo("red"));// jdk5之后Comparable<Date> c =newDate();System.out.println(c.compareTo("red"));// 编译错误
publicclassDAO{public<E>Eget(int id,E e){E result =null;return result;}}
publicstatic<T>voidfromArrayToCollection(T[] a,Collection<T> c){for(T o : a){
c.add(o);}}publicstaticvoidmain(String[] args){Object[] ao =newObject[100];Collection<Object> co =newArrayList<Object>();fromArrayToCollection(ao, co);String[] sa =newString[20];Collection<String> cs =newArrayList<>();fromArrayToCollection(sa, cs);Collection<Double> cd =newArrayList<>();// 下面代码中T是Double类,但sa是String类型,编译错误。// fromArrayToCollection(sa, cd);// 下面代码中T是Object类型,sa是String类型,可以赋值成功。fromArrayToCollection(sa, co);}
classCreature{}classPersonextendsCreature{}classManextendsPerson{}classPersonTest{publicstatic<TextendsPerson>voidtest(T t){System.out.println(t);}publicstaticvoidmain(String[] args){test(newPerson());test(newMan());//The method test(T) in the type PersonTest is not //applicable for the arguments (Creature)test(newCreature());}}
四、泛型在继承上的体现
请输出如下来两段代码有何不同
publicvoidprintCollection(Collection c){Iterator i = c.iterator();for(int k =0; k < c.size(); k++){System.out.println(i.next());}}
publicvoidprintCollection(Collection<Object> c){for(Object e : c){System.out.println(e);}}
publicstaticvoidmain(String[] args){List<?> list =null;
list =newArrayList<String>();
list =newArrayList<Double>();// list.add(3);//编译不通过
list.add(null);List<String> l1 =newArrayList<String>();List<Integer> l2 =newArrayList<Integer>();
l1.add("abc");
l2.add(15);read(l1);read(l2);}publicstaticvoidread(List<?> list){for(Object o : list){System.out.println(o);}}
/**
* 要执行的算法,返回结果v
*/
public interface Computable<A, V> {
public V comput(final A arg);
}
/**
* 用于缓存数据
*/
public class Memoizer<A, V> implements Computable<A,