为什么不可能有逆变返回类型

时间:2014-05-06 17:45:10

标签: java generics contravariance

我在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的第三个参数)?

0 个答案:

没有答案