为什么Java泛型Java所有实例都有一个确切的类型。但是一个实例可以把它当作一个不同的类型,这个操作叫做多态实例:newout。也称为对象,它包含了AFather句柄等数据,它指向一个Son类(Father的子类),或者一个Father类,但是我们可以通过Java中的getClass函数获取它的原始类型classFather{}classSonextendsFather{}publicclassMain{publicstaticvoidmain(String[]args){Fatherfather=newSon();System.out.println(father.getClass().toString());//打印出Son}}但是多态的也带来了一个问题。当你得到一个Object[]时,你不知道里面是什么。没有限制,就是你不知道这个类长什么样。当然,放进去的人肯定知道它是什么,但是过一会应该就忘记了……想象有一天写代码的时候,拿着一个ArrayListArrayListuserList;以为里面肯定填的是User类,然后遍历的时候不知道是谁在里面放了一个Tool类,导致程序出错。这时候你肯定会想,为什么编译器不帮我检查???编译器此时认为一切都被视为Object,我是对的!于是泛型就诞生了ArrayListuserList;告诉编译器==限制它放入的具体类型==告诉编译器这个数据的类型只能在我定义的范围内,如果它超出范围,就会报错!例如,表示限制放入的输入数据类型为Integer,所以如果要对要放入的元素进行类型约束,可以使用泛型来解决。前提是你要知道你要放什么类型的元素。>?是Java中的通配符,用作参数、字段或局部变量的类型。这意味着它可以是任何类型。这里我感觉违反了使用泛型的前提,?可以放置在任何类型中。泛型用于约束可以放置在任何类型中的对象类型。这意味着没有约束。在线的看到很多人解释说>只是为了给别人看,我没有忘记泛型,但它真的允许任何类型放在这里。官方的Java声明是?代表任何类型。感觉是强制使用泛型,貌似代码符合规范....publicclassMain{publicstaticvoidprintList(List>list){//必须是Object因为list允许any键入(Objectelem:list)System.out.print(elem+"");System.out.println();}publicstaticvoidmain(String[]args){List>list=newArrayList<>();儿子父亲=新儿子();//会报错,不能在列表中放任何东西,甚至是Object,至于为什么,我不知道list.add(father);}}publicclassMain{publicstaticvoidprintList(List>list){for(Objectelem:list)System.out.print(elem+"");System.out.println();}publicstaticvoidmain(String[]args){//泛型擦除,因为List的泛型类型没有任何限制,可以等价于List