关于<? extends Class>和<T extends Class>的区别

通配符

复制代码
>在Java中通配符用?表示。
>在不确定泛型参数的具体类型时,可以使用?代替,
>比如public  void set(List<?> list)
>在调用方法时,参数既可以是List<String>也可以是List<Integer>

边界

复制代码
<? extends Number>表示上边界限定,泛型参数只能是Number及其子类,一旦实例化其他参数类型则会报错
<? super Number>表示下边界限定,泛型参数只能是Number和它的父类。

除此之外,我们发现其实在使用< T extends Number >也是有效的,也是限定参数类型T只能是Number及其子类。那么他们之间的区别是什么呢?

T是用于泛型类和泛型方法中的定义,比如

复制代码
//泛型类
class Demo1<T extends ClassDemo>{
	......
}
//泛型方法
public <T extends ClassDemo> void set(T x) {
	......
}

?是用于类的声明或者是参数,比如

复制代码
public class GenericsTest {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	ArrayList<? extends Number> str ;//在声明类时使用,不清楚泛型的类型,可用?表示,再用具体的类型实例化
	str = new ArrayList<Integer>();
	//str = new ArrayList<Double>();
	
	GenericsTest a = new GenericsTest();
	List<Double> list = new ArrayList<Double>();
	a.set(list);//在调用参数时直接使用具体的实参
	}
	public  void set(List<? extends Number> list) {//在定义时泛型参数不确定使用?表示
	}
}
相关推荐
XiaoLeisj6 小时前
Android 文件存储实战:从应用私有目录读写到网络文件落盘与公共存储接入
android·java·网络·文件操作
茶本无香7 小时前
JVM调优介绍 + 面试题标准答案(高级)
java·jvm·面试
创梦流浪人7 小时前
soli-admin一款开箱即用的RBAC后台项目
java·spring boot·vue3·springsecurity
南山love7 小时前
spring-boot多线程并发执行任务
java·开发语言
希望永不加班7 小时前
SpringBoot 配置 HTTPS(自签名证书+正式证书)
java·spring boot·后端·spring·https
骇客野人7 小时前
Java实现B+树,体会B+树做索引的精妙
java·开发语言·b树
ProgramHan7 小时前
十大排行榜——后端语言及要介绍
java·c++·python·php
小江的记录本7 小时前
【反射】Java反射 全方位知识体系(附 应用场景 + 《八股文常考面试题》)
java·开发语言·前端·后端·python·spring·面试
callJJ7 小时前
Ant Design Table 批量操作踩坑总结 —— 从三个 Bug 看前端表格开发的共性问题
java·前端·经验分享·bug·管理系统
没有bug.的程序员7 小时前
100%采样率引发的全线熔断:Spring Boot 链路追踪的性能绞杀与物理级调优
java·spring boot·后端·生产·熔断·调优·链路追踪