<>和<有什么区别?扩展了 Java 泛型中的 Object>?
我以前见过通配符用来表示任何对象 - 但最近看到了以下用途:
<? extends Object>
由于所有对象都扩展了 Object,这两种用法是同义词吗?
我以前见过通配符用来表示任何对象 - 但最近看到了以下用途:
<? extends Object>
由于所有对象都扩展了 Object,这两种用法是同义词吗?
<?>
并且是同义词,正如您所期望的那样。<? extends Object>
在一些泛型中,实际上并不是多余的。例如,将导致删除不足,而随之而来的将是擦除之下。(如果您尝试保留与使用 的前泛型 API 的兼容性,这可能很重要。extends Object
<T extends Object & Foo>
T
Object
<T extends Foo>
Foo
Object
资料来源:http://download.oracle.com/javase/tutorial/extra/generics/convert.html;它解释了为什么JDK的类有一个带有这个签名的方法:java.util.Collections
public static <T extends Object & Comparable<? super T>> T max(
Collection<? extends T> coll
)
虽然应该是 的捷径,但两者之间有一个很小的区别。 是可再生的,而不是。他们这样做的原因是更容易区分可再生类型。任何看起来像,的东西都是不可重复的。<?>
<? extend object>
<?>
<? extend object>
<? extends something>
<T>
<Integer>
例如,此代码将起作用
List aList = new ArrayList<>();
boolean instanceTest = aList instanceof List<?>;
但这给出了一个错误
List aList = new ArrayList<>();
boolean instancetest = aList instanceof List<? extends Object>;
有关更多信息,请阅读Maurice Naftalin的Java泛型和集合