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 に答える