关于<? 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) {//在定义时泛型参数不确定使用?表示
	}
}
相关推荐
李慕婉学姐14 小时前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
奋进的芋圆16 小时前
Java 延时任务实现方案详解(适用于 Spring Boot 3)
java·spring boot·redis·rabbitmq
sxlishaobin16 小时前
设计模式之桥接模式
java·设计模式·桥接模式
model200516 小时前
alibaba linux3 系统盘网站迁移数据盘
java·服务器·前端
荒诞硬汉16 小时前
JavaBean相关补充
java·开发语言
提笔忘字的帝国17 小时前
【教程】macOS 如何完全卸载 Java 开发环境
java·开发语言·macos
2501_9418824817 小时前
从灰度发布到流量切分的互联网工程语法控制与多语言实现实践思路随笔分享
java·开发语言
華勳全栈17 小时前
两天开发完成智能体平台
java·spring·go
alonewolf_9917 小时前
Spring MVC重点功能底层源码深度解析
java·spring·mvc
沛沛老爹17 小时前
Java泛型擦除:原理、实践与应对策略
java·开发语言·人工智能·企业开发·发展趋势·技术原理