Mar*_*rco 15 java generics wildcard
在Java中,Collections类包含以下方法:
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> c)
Run Code Online (Sandbox Code Playgroud)
它的签名因其对泛型的高级使用而闻名,因此在Java的Nutshell书籍和官方的Sun Generics Tutorial中都提到了它.
但是,我无法找到以下问题的令人信服的答案:
为什么类型的形式参数Collection<? extends T>,而不是Collection<T>?还有什么好处?
类型推断是一个棘手的话题,我承认我不太了解.但是,请检查此示例:
public class ScratchPad {
private static class A implements Comparable<A> {
public int compareTo(A o) { return 0; }
}
private static class B extends A {}
private static class C extends B {}
public static void main(String[] args)
{
Collection<C> coll = null;
B b = Scratchpad.<B>min(coll);
}
public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> c) {
return null;
}
//public static <T extends Object & Comparable<? super T>> T min(Collection<T> c) {
// return null;
//}
}
Run Code Online (Sandbox Code Playgroud)
考虑min()的第一个签名允许调用编译而第二个签名不允许.这不是一个非常实际的例子,因为我必须问为什么我会明确地键入方法<B>,但也许有一个隐式推断,其中B将是推断类型.
| 归档时间: |
|
| 查看次数: |
1577 次 |
| 最近记录: |