设为首页 - 加入收藏
您的当前位置:主页 > 军事新闻 > 本文地址:http://www.duitang.net.cn/junshixinwen/2019/3804.html

Java 泛型解惑之? extends T和? super T

时间:2019-09-14 来源:(原创/投稿/转载) 编辑:联络员

  再扩展一下,食物分成水果和肉类,水果有苹果和香蕉,肉类有猪肉和牛肉,苹果还有两种青苹果和红苹果

  边界让Java不同泛型之间的转换更容易了。但不要忘记,这样的转换也有一定的副作用。那就是容器的部分功能可能失效。

  还是以刚才的Plate为例。我们可以对盘子做两件事,往盘子里set( )新东西,以及从盘子里get( )东西

  可能是Fruit?可能是Apple?也可能是Banana,RedApple,GreenApple?编译器在看到后面用Plate赋值以后,盘子里没有被标上有“苹果”。而是标上一个占位符:capture#1,来表示捕获一个Fruit或Fruit的子类,具体是什么类不知道,代号capture#1

  然后无论是想往里插入Apple或者Meat或者Fruit编译器都不知道能不能和这个capture#1匹配,所以就都不允许

  比如下面这个泛型方法里,三个T都指代同一个类型,要么都是String,要么都是Integer…

  但通配符?没有这种约束,Plate?单纯的就表示:盘子里放了一个东西,是什么我不知道

  既然元素是Fruit的基类,那往里存粒度比Fruit小的都可以。但往外读取元素就费劲了,只有所有类的基类Object对象才能装下。但这样的话,元素的类型信息就全部丢失。

栏目分类

本网转载作品的目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。

如涉及作品内容、版权等问题,请联系我们进行修改或删除!联系我们-

Top