大家有什么问题或者意见可以在评论区回复。欢迎大家共同探讨,共同学习,共同进步。在定义类级别时,需要使用“T”而不是通配符“?”。T表示某种类型,?表示一个不确定的类型,如下://Person后面的<>只能放在T里,不是吗?公共类Person{TgetPerson(){返回null;}}但在方法中,可以使用通配符“?”extends表示泛型的上界(表示传入的参数必须是extends后面类型的子类),super表示泛型的下界(表示传入的参数必须是后面类型的父类)super)publicclassPerson{TgetPerson(){返回空;}publicstaticvoidsavePerson(Listpersons){}}//通过super限制方法,只能传入Man和Man的父类publicstaticvoidgetList(ListpersonList){personList.forEach(s->System.out.println(s));}Listlist=newArrayList<>();list.add(newMan());getList(list);//通过extend限制方法,只能传入Man和Man子类publicstaticvoidgetList(ListpersonList){personList.forEach(s->System.out.println(s));}之后type被擦除,如果没有指定extends类型,会报错,因为没有我知道obj是什么类型,所以我当然不知道它的方法是什么?公共类TestGeneric{私有T对象;公测泛型(Tt){obj=t;}publicvoidtest(){obj.bits();//报错}}需要用extends指定该类型的子类,才能调用T的方法publicclassTestGeneric{private对象;公共TestGeneric(Tt){obj=t;}publicvoidtest(){obj.bits();}}在类型擦除的时候,如果两个方法的定义名和泛型类型外面都一样的话,就会编译报错,因为泛型在编译的时候会被类型擦除(其实就是去掉了泛型类型),然后就会有两个相同的方法,如下:{}//会报错,因为泛型会导致类型擦除,编译器会认为下面的方法和上面的方法参数一样publicvoidprint(Listi){}}