我想知道为什么这段代码编译成功?
源代码:
abstract class A<K extends Number>
{
public abstract <M> A<? super M> useMe(A<? super M> k);
}
编译成功
它是如何工作的,为什么会编译?M是任意类型,为什么可以使用呢?应该是:<M extends Number>
?这不会编译:
abstract class A<K extends Number>
{
public abstract <M> A<? super M> useMe(A<M> k);
}
错误信息:
类型参数 M 不在类型变量 K 的范围内,其中 M、K 是类型变量: M 扩展在方法 useMe(A) 中声明的对象 K 扩展在类 A 中声明的数字
有什么区别?