> 和有什么不一样?和 在 Java 泛型中?
我之前见过通配符用来表示任何对象 - 但最近看到了这样的用法:
<? extends Object>
由于所有对象都扩展对象,这两种用法是同义的吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我之前见过通配符用来表示任何对象 - 但最近看到了这样的用法:
<? extends Object>
由于所有对象都扩展对象,这两种用法是同义的吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
和
是同义词。
在某些情况下,泛型的
extends Object
实际上并不是多余的。例如,
将导致T
在擦除时变为Object
,而使用
时,它将变为Foo
正在被删除。 (如果您试图保持与使用Object
的预泛型 API 的兼容性,这可能很重要。)来源:http://download.oracle.com/javase/tutorial/extra/generics/convert.html;它解释了为什么 JDK 的 java.util.Collections 类有一个具有以下签名的方法:
<?>
and<? extends Object>
are synonymous, as you'd expect.There are a few cases with generics where
extends Object
is not actually redundant. For example,<T extends Object & Foo>
will causeT
to becomeObject
under erasure, whereas with<T extends Foo>
it will becomeFoo
under erasure. (This can matter if you're trying to retain compatibility with a pre-generics API that usedObject
.)Source: http://download.oracle.com/javase/tutorial/extra/generics/convert.html; it explains why the JDK's
java.util.Collections
class has a method with this signature:尽管
应该是
的快捷方式扩展对象>
,两者之间有微小的区别。是可具体化的,而
不是。他们这样做的原因是为了更容易区分可具体化的类型。有任何看起来像
< 的东西吗? extends some>
、
、
是不可具体化的。例如,此代码可以工作
,但会出现错误
,请阅读 Maurice Naftalin 的 Java generics and collections
Although
<?>
is supposed to be a shortcut for<? extend object>
, there is a tiny difference between the two.<?>
is reifiable while<? extend object>
is not. The reason they did this is to make it easier to distinguish reifiable type. Anything that looks like<? extends something>
,<T>
,<Integer>
are nonreifiable.For example, this code would work
but this gives an error
for more info read Java generics and collections by Maurice Naftalin
是
。
您可以阅读下面的共享链接以了解更多详细信息。
“?”
表示任何未知类型,它可以代表代码中的任何类型。如果您不确定类型,请使用此通配符。注意:
表示任何内容。所以它可以接受不是从
Object
类继承的类型。<代码> 表示您可以传递一个 Object 或扩展
Object
类的子类。T – 用于表示类型
E – 用于表示元素
K – 键
V - 值
N – 数字
参考:
<?>
is a shorthand for<? extends Object>
.You may read below shared link for more details.
"?"
denotes any unknown type, It can represent any Type at in code for. Use this wildcard if you are not sure about Type.Note:
<?>
means anythings. So It can accept of Type which are not inherited fromObject
class.<? extends Object>
means you can pass an Object or a sub-class that extendsObject
class.T – used to denote type
E – used to denote element
K – keys
V - values
N – for numbers
Ref: