泛型通配符和自定义T类型的区别

本文详细解释了Java中使用泛型时的两种不同语法:`<T extends A>` 和 `<? extends A>` 的区别。前者用于确定列表中元素的类型,后者则允许列表中存放任何A类的子类元素,且这些元素类型不必相同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 假设有一个类A,以下两个方法有什么区别

<T extends A> void test(List<T> list);

void test(List<? extends A> list);

<T extends A> void test(List<T> list);表示List里面装的某一类型.

void test(List<? extends A> list);表示里面是任一类型.

区别就是某一类型是确定的,通配符只能调用与参数类型无关的方法,而T类型可以调用与参数类型相关的方法。

<T extends A> void test(List<T> list); 这种方式,是在方法前先定义了一个类型T,T继承自A,List<T> list,list中的元素必须是T类型的,也就是说,list中的元素类型要一样。void test(List<? extends A> list); 这种方式,是指list中只要放入A的子类型的就行了,但是一个非final类的子类是可以有很多个的,所以用这种方式时,list中的元素类型是可以不相同的,只要它们都是A的子类型就行了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值