API中经常看到 Matcher<? super T>, Iterable<? extends T>, Map<?,? extends V>, Map<? extends K,? extends V>,谁能解释下,      ?,T,K,V是什么? <? super T> 表示什么?  <? extends T>表示什么?

解决方案 »

  1.   

    都没有正规的意思,只是一般用表示某种意思,像我们一般会把时间的变量设置为date
    这K 一般是指键对象  V一般是指值对象 而T是指任意对象
      

  2.   

    Map <String , Object> 代表key为String类型,value为Object
      

  3.   

     1、泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。   2、同一种泛型可以对应多个版本(因为参数类型是不确定的),不同版本的泛型类实例是不兼容的。   3、泛型的类型参数可以有多个。   4、泛型的参数类型可以使用extends语句,例如<T extends superclass>。习惯上称为“有界类型”。   5、泛型的参数类型还可以是通配符类型。例如Class<?> classType = Class.forName("java.lang.String"); 
      

  4.   

    T,K,V是什么? 
    T,K,V都是类的类型,一般T表示类,K代表键值中的键,V代表键值中的值<? super T> 表示什么
    规定了泛型的下界T,也就是说这里面保存的所有对象都可以看作是T的某个确定父类的实例,添加的时候不会限制,但是获取的时候会限制。
    使用场景:A定义了一个接口容器,由外界传给A,A只往这个容器里面保存类型T的子类型,那么A就必须确保传入的容器必须能装得下T。也就是下界为T,只有这样才不会出错,泛型转换的时候才不会出错<? extends T>表示什么
    规定了泛型的上界T,也就是说这里面保存的所有对象都可以看作是T的某个确定子类的实例,添加的时候会做限制,获取的时候不会做限制。
    使用场景:A定义了一个接口容器,A只读取这个接口,由于获取是不做限制的,所以A能够读取接口容器里面的东西都是T,而不关心这个容器里面具体保存的是T的哪个子类的对象。而B来实现这个接口,至于具体保存了T的哪一个子类对象,是由B来决定的
    可以参考
    http://blog.csdn.net/daniel_h1986/article/details/5708605