关于<? 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) {//在定义时泛型参数不确定使用?表示
	}
}
相关推荐
simple_ssn27 分钟前
【蓝桥杯】压缩字符串
java·算法
舒克日记42 分钟前
Java:189 基于SSM框架的在线电影评价系统
java·开发语言
2401_857610031 小时前
中文学习系统:成本效益分析与系统优化
java·数据库·学习·架构
nbsaas-boot1 小时前
如何更高效地使用乐观锁提升系统性能
java·服务器·数据库
转转技术团队1 小时前
【述职黑话】ToB交易业务解决方案之状态机
java·状态模式
darkdragonking1 小时前
解决POM依赖与maven仓库关联的问题
java·maven
m0_672449601 小时前
前后端分离(前端删除数据库数据)
java·数据库·mysql
飞的肖1 小时前
在 Java 项目中集成和使用 dl4j 实现通过扫描图片识别快递单信息
java·ai·图像识别·dl4j
Javatutouhouduan1 小时前
如何系统全面地自学Java语言?
java·后端·程序员·编程·架构师·自学·java八股文
正在绘制中1 小时前
Java重要面试名词整理(八):RabbitMQ
java·面试·java-rabbitmq