私はコンパイルすべきだと思うコードを持っていますが、それはありません。ここでは、コードは次のとおり具体的なEnumMapオブジェクトのリストをgenericに渡すEnumMapパラメータのリストによりコンパイルエラーが発生する
public class Program {
public void myMethod(List<EnumMap<? extends MyInterface, String>> map)
{
}
public void caller()
{
EnumMap<MyEnum, String> map = new EnumMap<MyEnum, String>(MyEnum.class);
List<EnumMap<MyEnum, String>> list = new LinkedList<EnumMap<MyEnum, String>>();
myMethod(list); //error argument type is not compatible
}
}
MyEnumはMyInterfaceを実装する列挙です。
myMethod(list)の呼び出しで私の引数型が互換性がないのはなぜですか?
私はMyMethodはの署名を変更する場合:
public void myMethod(List<? extends Map<? extends MyInterface, String>> map)
その後、すべてが正常に動作しますが、私はまだ困惑してると、元 メソッドのシグネチャが動作しない理由を知りたいです。
ありがとう、私はあなたが言っていることを理解していますが、方法の署名をpublic void myMethod(List <?extends Map <?extends MyInterface、String >> map)に変更すると、エラーは消えますか?エラーがあってはならないのですか? – Alvin