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是一个自定义的父类 展开
public static void show(List<? extends Person> al){}//这种方式可以通过编译
public static void show(List<T extends Person> al){}//这种方式不能通过编译
这两者有什么区别?为什么后者不能通过编译
这里的person是一个自定义的父类 展开
3个回答
展开全部
貌似?是任意类包括自建类。而T是泛型,仅包括系统已存在的JAVA类。不包括自建类
纯属个人观点
纯属个人观点
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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){}
}
表示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){}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询