java泛型T和?的疑惑?通俗解释下?

1:为什么说T是代表特定类型,?代表任意类型,T不也是未知任意的类型吗,具体的要由实例化时传入的类型决定,传入之前不也是未知任意的吗?
2:下图如何理解?

为什么说?的意义是实例化泛型参数,?不是代表任意类型吗(如果去掉图中的extends),怎么能实例化类型参数T呢,他自己本身就是任意类型?

回答

?相当于通配符,比如fun(List<?> p)可以接收任意的List类型的参数,fun(List<? extends Number> p)只能接收Number及其子类型。

对你有帮助的话请点个采纳点个赞,谢谢😊

针对两个疑问单独回答一下我自己的理解吧

第一问:
感觉题主是太只看定义,不把定义放在定义需要的环境中看,我可以举个通俗的例子,比如我们时常在武打小说或者剧本里看到的描述

小明一拳打到小刚身上,小刚后撤一步,突然,小李及时赶到,使出一招动感光波打的小明前仰后翻

假如这个小说被拍成电视剧,那小明这个角色,任何一个演员都可以演,但是只要他演,他就只能做出一个动作,就是一拳打小刚,后面再前仰后翻,他不能后撤一步,他也不能发动感光波,这就是特定的类型,他只能出现在特定的场景中,而且必须符合

此时我们再把小说改改

小明一拳打到那个谁身上,那个谁后撤一步,突然,小李及时赶到,使出一招动感光波打的小明前仰后翻

此时小明一拳打到了那个谁,那这个那个谁的角色谁来演,那也是任意都可以的,就算开始演员1演,后面还可以改成演员2演,不重要,因为剧本里对于这个角色没有限定,其实就是群演,这就是任意类型

无论那个谁,还是小明,小刚,小李,其实只是剧本里的限定词,是角色,帮助理解剧情的

所以把T?放在java代码里来看,代码就是剧本,那T?其实也只是限定词,限定类型,保证编译安全,那在代码中出现T的类型,那永远都是特定的某一类型,它是小明一样的存在,而?却是没有任何限制,它是那个谁,是群演的存在,所以它们的特定和任意就是指这个意思

第二问:
可能是这些术语太拗口了吧,你可以不用管太多,因为T?都只是限定词,就不要太在意他们具体怎么实例化了,就像你写剧本的还要关心这个角色由哪个演员来演么?你只要清楚剧本里有哪些角色就可以了,他们到底有什么复杂的爱恨情仇就行。

就算是<? extends E>按照我们之前剧本的例子来讲,那就变成

小明一拳打到红发男身上,红发男后撤一步,突然,小李及时赶到,使出一招动感光波打的小明前仰后翻

这里的红发男就是对于任意演员的一个限制,必须要求是红发的,在代码里跟<? extends E>效果就差不多了

泛型本质也只是为了保证代码编译时类型安全
image.png

这就相当于保证剧本的故事通畅,不能各个角色乱了套,不然故事没办法讲明白,代码同理

以上就是我的小小例子吧,不知道是否够通俗ヾ(´∀`o)+ 不同俗我也没办法了

以上是 java泛型T和?的疑惑?通俗解释下? 的全部内容, 来源链接: utcz.com/a/37804.html

回到顶部