使用通配符时,某些方法(例如ArrayList.set
)无法使用并返回类似于以下内容的错误消息
List 类型中的方法 set(int, capture#3-of ?) 不适用于参数 (int, String)
我已经阅读了为什么会这样,并想知道这是如何完成的。那就是编译器如何知道某些方法适用(例如List.get(int)
)而其他方法不适用?
使用通配符时,某些方法(例如ArrayList.set
)无法使用并返回类似于以下内容的错误消息
List 类型中的方法 set(int, capture#3-of ?) 不适用于参数 (int, String)
我已经阅读了为什么会这样,并想知道这是如何完成的。那就是编译器如何知道某些方法适用(例如List.get(int)
)而其他方法不适用?
所有适用的规则都在Java 语言规范 #15.12中。
编译器为每次出现的通配符分配特殊标记 ( capture#3-of ?
),并使用常规方法适用性规则 ( JLS 15.12.2 )。
由于通配符的捕获与其他类型和其他捕获不兼容,因此会产生“方法不适用”。