关于<? 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) {//在定义时泛型参数不确定使用?表示
	}
}
相关推荐
晓13139 分钟前
第二章:Redis常见命令与Java客户端
java·数据库·redis
invicinble10 分钟前
对于springboot
java·spring boot·后端
莫问前路漫漫20 分钟前
JRE 核心实操指南:安装、配置、调优与问题排查
java·eclipse·tomcat·jre
填满你的记忆29 分钟前
【从零开始——Redis 进化日志|Day7】双写一致性难题:数据库与缓存如何不再“打架”?(附 Canal/读写锁实战)
java·数据库·redis·缓存·面试
灵感菇_30 分钟前
Android OkHttp框架全解析
android·java·okhttp·网络编程
Coder_Boy_34 分钟前
基于SpringAI的在线考试系统-知识点管理模块完整优化方案
java·前端·人工智能·spring boot
莫问前路漫漫38 分钟前
Java Runtime Environment(JRE)全解析:Java 程序跨平台运行的核心基石
java·开发语言
进阶小白猿40 分钟前
Java技术八股学习Day22
java·开发语言·学习
蒟蒻的贤44 分钟前
操作系统复习
java·开发语言·数据库
sanggou1 小时前
Spring Boot 中基于 WebClient 的 SSE 流式接口实战
java·人工智能