Vin*_*ele 5 java generics contravariance
我正在玩Java中的泛型,我发现了一些奇怪的东西:
以下编译:
public static <A, B extends A> B reduce(Function2<A, A, B> func)
{
//code doesn't matter
}
Run Code Online (Sandbox Code Playgroud)
但以下不是:
public static <A, B super A> B reduce(Function2<A, A, B> func)
{
//code doesn't matter
}
Run Code Online (Sandbox Code Playgroud)
在我看来上面是完全有效的(毕竟,这几乎是Scala集合中reduce方法的签名).
为什么Java不允许逆变返回类型,特别是在这种情况下,因为将推断返回(通过Function2的第三个参数)?