2

使用通配符时,某些方法(例如ArrayList.set)无法使用并返回类似于以下内容的错误消息

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

我已经阅读了为什么会这样,并想知道这是如何完成的。那就是编译器如何知道某些方法适用(例如List.get(int))而其他方法不适用?

4

2 回答 2

3

所有适用的规则都在Java 语言规范 #15.12中。

于 2013-01-08T08:30:22.807 回答
2

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

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

于 2013-01-08T08:33:25.050 回答