老师,能不能讲一下?和T的区别

老师,能不能讲一下?和T的区别

老师,能不能讲一下通配符?和经常使用到的T有什么区别

还有,

List<T extends Number> list1
List<? extends Number> list2

这样的用法有什么区别?

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,1. 老师不理解同学的意思,同学可重新描述一下。

2. 两者区别

  •   '?' 是通配符。它指的是 一个接口类型 的任何一个子类 类型,当然,也包括这个接口本身的类型。因为‘?’是通配符,因此在类的声明和方法的声明中用到的 ‘?’,是没有关联的。 所以,只要:List<?>  get(); 就可以通过编译。 
    例如,下列场景允许 List的元素可以是 Bar 的任何一个子类的类型

interface Foo {
     List<? extends Bar> get();
}
  •  'T' 是指在某一给定场合下一个接口的特定实现, 只能代表一个类型。
    例如,下列场景意味着,整个接口(类) 仅能处理 Bar 这一个类型(和Bar子类)的对象:

interface Foo<T extends Bar> {    
     List<T> get();
}

祝学习愉快!

  • mahsiaoko 提问者 #1
    我可不可以这样理解,假如A,B,C都属于Bar的子类, 对于通配符?,List<? extends Bar> get();List的元素此处A,B,C都可以; 对于T的话,只能是其中一个类型?
    2020-08-17 19:30:08
  • 好帮手慕小尤 回复 提问者 mahsiaoko #2
    同学你好,同学这样理解是可以。祝学习愉快!
    2020-08-18 09:32:34
  • List<? extends Bar> get(); 这句话是什么意思啊?为什么没有返回类型,有学过吗?

    2021-11-22 23:09:46
英勇的火炬 2020-08-17 21:24:35

我理解的是T一般用在定义泛型类或方法的时候,因为类或者方法中需要用到泛型定义的类型,T不管是类本身还是子类,我们在定义的类中都可以直接用来指代将要传进来的类型,这时候用‘?’这个通配符肯定不合适。‘?’的话就在使用泛型类或者方法的时候用,通配extends的类和它的子类。

好帮手慕小尤 2020-08-17 16:50:32

同学你好,<? extends Number>和<T extends Number>代码可传入Number类与Number的子类。只不过?和T 代表的含义不同。

2.  <? extends Number>?通配符,代表一个未知的类型,并不会限制泛型,这个未知的类型可以是Number的一个子类。如下所示:可以传递Goods类或Goods类的子类。

http://img1.sycdn.imooc.com//climg/5f3a42a9091a381a07940220.jpg

3.<T extends Number>中的T会限制类型,需要传递Number或Number的子类。
祝学习愉快!

  • 提问者 mahsiaoko #1
    老师,你说?代表未知类型,T会限制类型;但是在这两个里面不都限制了需要传递Number或者Number的子类了吗?这里面的区别是不是<T extends Number>用于声明的时候,就是声明一个泛型类或者方法,而在使用的时候就不能使用<T extends Number>,而需要使用<? exetnds Number>
    2020-08-17 17:22:12
好帮手慕小尤 2020-08-17 15:42:22

同学你好,1、<T>"和"<?>",首先要区分开两种不同的场景:<T>主要用于“声明一个泛型类或泛型方法”。<?>主要用于“使用泛型类或泛型方法”。例如,定义一个泛型类,class School<T>是正确的,但class School<?>就是错误的。

2、T限制了类型,?只是通配符。

    <T extends ClassA>表示后续都只能使用T进行某些判断或操作,而<? extends ClassA>表示后续使用时只要是ClassA的子类即可。

    课程中<? extends Number> 这里?代表一个未知的类型,但是这个未知的类型实际上是Number的一个子类,Number是这个通配符的上限。而<T extends Number>中的T是Number子类一个确定类型。

如果我的回答解决了你的疑惑,请采纳。祝:学习愉快~

  • 提问者 mahsiaoko #1
    第二点有点不太理解,老师能不能举个具体的例子,谢谢
    2020-08-17 15:52:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师