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

如定义一个方法publicstaticvoidshow(List<?extendsPerson>al){}//这种方式可以通过编译publicstaticvoidshow... 如定义一个方法
public static void show(List<? extends Person> al){}//这种方式可以通过编译
public static void show(List<T extends Person> al){}//这种方式不能通过编译
这两者有什么区别?为什么后者不能通过编译
这里的person是一个自定义的父类
展开
 我来答
SWkissme
2013-09-29 · TA获得超过430个赞
知道小有建树答主
回答量:181
采纳率:88%
帮助的人:80.8万
展开全部
?表示一个不确定的类型,? extends Person 就是说已经确定父类是Person类了,然后再满足?是Person类的子类

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

大概就是这个意思!
han5666892
2013-09-29 · TA获得超过169个赞
知道小有建树答主
回答量:214
采纳率:0%
帮助的人:159万
展开全部
貌似?是任意类包括自建类。而T是泛型,仅包括系统已存在的JAVA类。不包括自建类
纯属个人观点
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友33dcad5a0
2013-09-30 · TA获得超过164个赞
知道答主
回答量:69
采纳率:100%
帮助的人:80.6万
展开全部
public static void show(List<范型> al){}
表示show方法接受List al为参数,范型用来限定al中的元素类型,这是这行语句的本意。
范型中“?”代表一个在这里未知的类型,<? extends Person>限定这个未知类型为Person或其子类。
在范型中使用T(或其他名字代表类型)时,编译器理解T为一个已知的类型,就是说必须事先定义一个类型T,才能在这里使用。这并不是这行代码的本意,所以不曾定义T,所以编译器报错说无法处理类型T。
下面这个例子语法正确,供参考:
public class MyClazz <T extends Person> {
//上面定义类型T,具体T是什么类型要在类实例化时候指定,
//注意下面方法使用类型T,但不是static方法
public void show(List<T> al){}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式