Java有界泛型类型定义

22

以下类型定义有何不同之处?

<E extends Number>

<? extends Number>

祝好, Don

1个回答

22

此版本:

<? extends Number> 

可以出现在非泛型方法/类型中,基本上意味着“我不在乎这个类型是什么,只要它派生自Number。我并不会真正使用这个类型,我只需要它是适当的。”

<E extends Number>

要求E是一个类型参数。它允许您做更多的事情(例如,在稍后创建ArrayList<E>),但是当您不需要这些额外的类型参数时,这些参数可能会使事情变得更加复杂。


更正式地说,可以说第二个是一个形式类型参数定义,而第一个仅仅是一个参数定义吗? - Dónal
是否可以这样说,只有在您需要通过“别名”E来引用类型时才应使用第二个定义? - Dónal
我不想在没有查阅规范的情况下发表第一条评论(而且我马上就要睡觉了)。不过第二条评论似乎是合理的。请查看Josh Bloch在《Effective Java》中的建议 - 他可能已经涵盖了这个问题 :) - Jon Skeet
2
其实,这个问题是我在阅读《Effective Java》时想到的! - Dónal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接