일반 유형 매개 변수를 유추하는 Java 규칙을 탐색하는 데 문제가 있습니다. 선택적 목록 매개 변수가있는 다음 클래스를 고려하십시오.
import java.util.Collections;
import java.util.List;
public class Person {
private String name;
private List<String> nicknames;
public Person(String name) {
this(name,Collections.emptyList());
}
public Person(String name,List<String> nicknames) {
this.name = name;
this.nicknames = nicknames;
}
}
내 Java 컴파일러는 다음 오류를 제공합니다.
Person.java:9: The constructor Person(String, List<Object>) is undefined
그러나 Collections.emptyList()
type <T> List<T>
이 아닌을 반환합니다 List<Object>
. 캐스트를 추가해도 도움이되지 않습니다
public Person(String name) {
this(name,(List<String>)Collections.emptyList());
}
수확량
Person.java:9: inconvertible types
EMPTY_LIST
대신에 사용emptyList()
public Person(String name) {
this(name,Collections.EMPTY_LIST);
}
수확량
Person.java:9: warning: [unchecked] unchecked conversion
다음과 같이 변경하면 오류가 사라집니다.
public Person(String name) {
this.name = name;
this.nicknames = Collections.emptyList();
}
누구든지 내가 여기에서 실행중인 유형 검사 규칙과 그 문제를 해결하는 가장 좋은 방법을 설명 할 수 있습니까? 이 예제에서 최종 코드 예제는 만족 스럽지만 클래스가 클수록 코드를 복제하지 않고이 "선택적 매개 변수"패턴에 따라 메소드를 작성할 수 있기를 원합니다.
추가 크레딧 : EMPTY_LIST
대신에 사용하는 것이 언제 적절한 emptyList()
가요?