java中为什么在方法上定义受限泛型时?改为T会不行? 这两者有什么区别?

2024-12-12 10:29:20
推荐回答(3个)
回答1:

?表示一个不确定的类型,? extends Person 就是说已经确定父类是Person类了,然后再满足?是Person类的子类

T表示这个类已经是一个确定的类型,比如T表示String类、Object类或者其他某个具体的类,然后T extends Person意思就是说这个具体的类要继承自Person类,这个明显就有问题,因为一个类继承自另一个类是在class中定义的,所以这里有矛盾

大概就是这个意思!

回答2:

貌似?是任意类包括自建类。而T是泛型,仅包括系统已存在的JAVA类。不包括自建类
纯属个人观点

回答3:

public static void show(List<范型> al){}
表示show方法接受List al为参数,范型用来限定al中的元素类型,这是这行语句的本意。
范型中“?”代表一个在这里未知的类型,限定这个未知类型为Person或其子类。
在范型中使用T(或其他名字代表类型)时,编译器理解T为一个已知的类型,就是说必须事先定义一个类型T,才能在这里使用。这并不是这行代码的本意,所以不曾定义T,所以编译器报错说无法处理类型T。
下面这个例子语法正确,供参考:
public class MyClazz {
//上面定义类型T,具体T是什么类型要在类实例化时候指定,
//注意下面方法使用类型T,但不是static方法
public void show(List al){}