java中在哪些情况下需要使用泛型通配符如:? extends T 或者 ? super T
至于什么是泛型通配符,我是知道的,但是不知道具体在项目里的使用场景,比如哪些情况下,我们创建的类或者接口需要用到泛型通配符呢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
至于什么是泛型通配符,我是知道的,但是不知道具体在项目里的使用场景,比如哪些情况下,我们创建的类或者接口需要用到泛型通配符呢
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
记住 Effective Java 一书中的这句话:Producer Extends, Consumer Super 。
这里讲得很详细:http://stackoverflow.com/ques...
补充
TreeMap
有个构造函数:可以想想为什么要指定类型Comparator<? super K>,而不是Comparator<K>或Comparator<? extends K>?
我不写Java,但所有的泛型都是相通的。正好我此时在看淘宝OPEN的SDK,这是一个最好来解释泛型通配符最好的真实示例了。
我特意找了一份Java版本的SDK,见:https://github.com/ggd543/tao...
所有API请求都是通过
execute
来操作的,而这个方法就采用的? extends T
通配符上界,来限制返回的对象必须是TaobaoResponse
的子类。简单点说就是约束。
那从淘宝SDK的角度来看,通配符上界最大的价值是淘宝所有SDK请求返回的结果都会带有一个
code
、msg
等一些通用的参数来表示API的请求状态。那好,我们回过头来看
execute
的具体实现:注意到这里的
catch
体中localResponse
,他的类型T
,但这个T并不是简单的一个Object对象,由于前面已经限定T
的类型必须是TaobaoResponse
的子类。那就意味者,当对
T
进行实例后,其类型至少是TaobaoResponse
的子类,而对于TaobaoResponse
的定义是这样的:因此你可以直接看到这样的代码:
瞧,是不是很有意思,所有通用参数都可以统一进行处理。
那么从淘宝SDK的角度来讲,而泛型通配符的意义就在于此了。