Replace this type parametrization by the 'final' type `String`.
2023, Jun 01
problem
- java:S4968
public Metaarray(Map<? extends String, ? extends IdSet> m) {
super(m);
}
- 문제로 발견된 코드는 ? extends String
- 에러 메시지를 직역하면 “이 타입 매개변수화를 ‘final’ 타입
String
으로 대체하세요”라는 의미로 - String은 final 클래스이기 때문에 extend가 불가능하기 때문에 그냥 직접 String타입으로 선언하라는 의미
- 에러 메시지를 직역하면 “이 타입 매개변수화를 ‘final’ 타입
cause
The upper bound of type variables and wildcards should not be "final"
- Java에서 제네릭 타입 변수 또는 와일드카드의 upper bound로 ‘final’로 지정된 타입을 사용해서는 안 된다는 의미.
- 하지만 소나큐브에서 문제로 인식한 코드는 사실 와일드카드 범위를 정하고 있기 때문에 유효한 코드로 보이지만, 수정
- 즉, 해당 생성자는
Map
을 매개변수로 받아서 상위 클래스인HashMap
의 생성자를 호출하는데, 이는 매개변수m
이String
또는String
의 하위 클래스로 키를 가지고,IdSet
또는IdSet
의 하위 클래스로 값을 가지는Map
객체를 받을 수 있음을 의미
solved
public Metaarray(Map<String, ? extends IdSet> m) {
super(m);
}
- String으로 직접적 선언