准备 OCPJP 6 考试(这就是我使用 Java 1.6 编译器的原因) 我注意到一些关于 Java 泛型的不清楚的地方。考虑以下代码:
class A<K extends Number> {
public <V> V useMe1(A<? super V> a) { // OK
return null;
}
public <V> V useMe2(A<? extends V> a) { // OK
return null;
}
public <V> V useMe3(A<V> a) { // ERROR, but why, since 2 above were ok
return null;
}
}
当我尝试编译代码(使用 1.6 编译器)时,出现错误:
类型参数 V 不在其范围内
尽管上面的代码不可用,但我想知道为什么编译器认为类型<? super V>
和<? extends V>
匹配绑定的类类型但<V>
不是(因为 V 匹配这两个边界)。
我不打算修改该代码,我想了解它。该代码取自示例 OCPJP 6 考试问题,询问“哪一行将编译?”