考虑以下课程:
class A<T extends Number> {
}
我想知道为什么这行成功编译?
A<? extends Object> a = new A<Integer>();
虽然这段代码不是
class B {
static <T extends Object> void m(A<T> a) {}
}
在这两种情况下,编译器都知道&#34;范围? extends Object
超出范围? extends Number
,范围为A
,但接受第一个并拒绝第二个。
Java语言或JVM规范中有什么相关内容吗?