컴파일해야 할 코드가 있지만 실제로는 그렇지 않습니다. 여기 코드는 다음과 같습니다구체적인 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)를 호출하면 인수 유형이 호환되지 않는 이유는 무엇입니까?
I가 MyMethod라는 서명을 변경하는 경우 :
public void myMethod(List<? extends Map<? extends MyInterface, String>> map)
후 모든 것이 잘 작동하지만 난 여전히 의아해 해요 원래 방법 서명이 작동하지 않는 이유를 알고 싶습니다. 우리는 bs = as
을 할당 할 수 있어야한다
enum MyEnum implements MyInterface { ...}
...
List<EnumMap<MyEnum, String>> as = new ArrayList<EnumMap<MyEnum, String>>();
List<EnumMap<? extends MyInterface, String>> bs;
주어진
고마워요, 당신이 무슨 말을하는지 이해하지만 어떻게 공백 void myMethod (List extends Map extends MyInterface, String >> map) 메서드 서명을 변경하면 오류가 사라지게됩니까? 오류가 발생하지 않아야합니까? – Alvin