java编译器如何确定'方法不适用'?

时间:2013-01-08 08:25:04

标签: java bounded-wildcard

使用通配符时,无法使用某些方法(例如ArrayList.set)并返回类似于

的错误消息
  

类型List中的方法set(int,capture#3-of?)不适用于参数(int,String)

我已阅读why这种情况,并想知道如何做到这一点。那就是编译器如何知道某些方法适用(例如List.get(int))但其他方法不适用?

2 个答案:

答案 0 :(得分:3)

所有适用的规则都在Java Language Specification #15.12

答案 1 :(得分:2)

编译器为每个出现的通配符分配特殊标记(capture#3-of ?)并使用常规方法适用性规则(JLS 15.12.2)。

由于通配符的捕获与其他类型和其他捕获不兼容,因此产生了“不适用的方法”。