1,List
2,List <Object>
3,List <Number>
4,List <?>
5,List <? extends Number>
6,List <? super Long>  
啥意思。帮忙解释下

解决方案 »

  1.   

    泛型与反射
    反射和泛型的功能都十分强大,将它们结合起来也特别有趣,本文试图就Java语言的反射和泛型的关系做一点探讨,用以抛砖引玉,引起大家对两种技术的兴趣!                                                                         泛型与反射 研究泛型与反射之间的关系非常有趣。 
    我们知道,反射和泛型都是Java的一种动态技术。而不像继承和多态,是面向对象的技术。可以这么说,反射和泛型都像是为了弥补像继承和多态这些面向对象技术的不足而产生的。模式多是建立在面向对象技术基础上的,因而每种模式多多少少在动态性,或者说扩展性方面有些不足,我们就又结合了反射和泛型对模式进行一定的扩展,使它在动态性方面更符合我们的要求。 
    在将这些技术结合起来的过程中,我们多多少少会想到将泛型和反射结合起来。这是非常有趣的话题:范型和反射都使得Java有了一定的扩展性,但同时都有它自己的不足,而将这两种技术结合起来,是不是又能解决各自的不足,使得它们在动态性上更上一层楼呢? 
    正像前面所说的,泛型和反射可以相互促进,我们先来看看泛型是怎么帮助反射的。 
    我们知道,使用反射的一个最大的烦恼就是应用反射以后得到的基本上都是Object类型的对象,这种对象要使用,需要我们进行强制类型转化。而我们更知道,泛型的功能之一就是消除我们使用强制类型转化。
      

  2.   

    List是一种集合,它包括ArrayList,LinkedList等;
    List<Object>  当尖括号里边 没填一种类型或者是 没有尖括号的话,只能说明这是一个集合,一个大容器,至于容器里边放什么东西,都是不知道的。可以放String,Long,Integer等等类型,是一个混合体。而当在尖括号里边加上一种类型的时候,那么这个容器里边只能装入一种你所指定的类型了,是一个单纯体,不再是一个混合体了!
      

  3.   

    1,List 默认是与2一样的.
    2,List <Object> 可以容纳任何对象,因为任何对象都属于Object
    3,List <Number> 只可以容纳是Number类型的对象.(任何继承Number类的子类或者实现Number接口的类都可以看成Number对象)
    4,List <?> 带有不确定的返型类型,这个时候连Object对象都不能添加进去,因为编译期间不能通过.
    5,List <? extends Number> 依然带有不确定的返型类型(继承Number和实现Number接口的类型有很多)无法添加任何Object对象,编译通不过.
    6,List <? super A>比较安全,可以容纳任何属于Long对象,定义的时候可以List <? super A>  g=new ArrayList<C>();其中A extends C,但是不能添加C对象如g.add(new C())编译错误;但是可以添加任何属于A类型的对象.
      

  4.   

    补充一下5楼的:
    4.<?> 表示List中存放的是某种具体的类型,而这种具体的类型是什么编译器不知道,所以不允许放入任何类型,add()方法无法调用。可以调用get()方法返回,自己进行转型,编译期间不会报错,但运行期间可能面临转型错误。5.<? extends Number> 表示List中存储的是继承自Number的某种具体类型,同上,而这种具体的类型是什么编译器不知道,所以不允许放入任何类型,add()方法无法调用。可以调用get()方法返回,编译器可以在编译期和运行期都确保返回的类型属于Number类型(任何继承Number类的子类或者实现Number接口的类都可以看成Number对象)。如果要进行向下转型,则可能面临运行期错误。6.<? super A> 表示List中存储的是A或A的某种基类,而A或A的子类都可以看作是A或A的基类类型,所以向List中添加A或A的子类是安全的。而向其中添加A的基类O则会报错,因为如果可以添加O类型,那么就可以添加B类型(因为B也属于O类型),无法保证存入的都是A的继承体系中的对象。import java.util.*; class O {}
    class A extends O {}
    class B extends O {}
    class A1 extends A {}
    class B2 extends B {}public class Test {
    public static void main(String[] args) {
    List<A> a = new ArrayList<A>();
    List<? super A> a1 = a;
    a1.add(new A());
    a1.add(new A1());
    a1.add(new O());//error
    }
    }
    <? extends A> 保证读取的是A类型的。
    <? super A> 保证写入的是A类型的。