abstract class Type<K extends Number> {
abstract <K> void use1(Type<K> k); // Compiler error (Type parameter K is not within its bounds)
abstract <K> void use2(Type<? extends K> k); // fine
abstract <K> void use3(Type<? super K> k); // fine
}
方法的泛型类型K覆盖了类的泛型类型K,因此在use1()
中,<K>
与<K extends Number>
不匹配。编译器对于use2()
和use3()
中的新泛型类型<K>
一无所知,但仍然可以合法编译。为什么<? extends K>
(或者<? super K>
)与<K extends Number>
匹配?