我在Java中使用泛型,我发现了一些奇怪的东西:
以下编译:
public static <A, B extends A> B reduce(Function2<A, A, B> func)
{
//code doesn't matter
}
但以下情况并非如此:
public static <A, B super A> B reduce(Function2<A, A, B> func)
{
//code doesn't matter
}
在我看来,上述内容完全有效(毕竟,这几乎是Scala集合中reduce方法的签名)。
为什么Java不允许逆变返回类型,特别是在这种情况下,因为返回将被推断(通过Function2的第三个参数)?