gpt4 book ai didi

java - Collections.min/max 方法的签名

转载 作者:太空狗 更新时间:2023-10-29 22:54:51 24 4
gpt4 key购买 nike

在 Java 中,Collections 类包含以下方法:

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> c)

它的签名以其对泛型的高级使用而闻名,以至于在 Java in a 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;
//}
}

请考虑 min() 的第一个签名允许调用编译,而第二个签名则不允许。这不是一个非常实际的例子,因为有人肯定会问为什么我会显式地将方法键入 <B>。 ,但也许有一个隐含的推论,其中 B将是推断类型。

关于java - Collections.min/max 方法的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2907297/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com