Java에는 Collections.emptyList () 및 Collections.EMPTY_LIST가 있습니다. 둘 다 동일한 속성을 갖습니다.
빈 목록 (불변)을 반환합니다. 이 목록은 직렬화 가능합니다.
그렇다면 둘 중 하나를 사용하는 것의 정확한 차이점은 무엇입니까?
답변
Collections.EMPTY_LIST
이전 스타일을 반환합니다.List
Collections.emptyList()
유형 추론을 사용하므로
List<T>
Collections.emptyList ()는 Java 1.5에 추가되었으며 아마도 항상 선호 됩니다. 이렇게하면 코드 내에서 불필요하게 캐스팅 할 필요가 없습니다.
Collections.emptyList()
본질적 으로 당신을 위해 캐스트 를 수행합니다 .
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
답변
소스로 가자 :
public static final List EMPTY_LIST = new EmptyList<>();
과
@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
답변
그들은 절대적으로 동등한 대상입니다.
public static final List EMPTY_LIST = new EmptyList<>();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
유일한 것은 emptyList()
generic 을 반환 List<T>
하므로 경고없이 일반 컬렉션에이 목록을 할당 할 수 있습니다.
답변
즉, EMPTY_LIST는 형식이 안전하지 않습니다.
List list = Collections.EMPTY_LIST;
Set set = Collections.EMPTY_SET;
Map map = Collections.EMPTY_MAP;
비교하자면:
List<String> s = Collections.emptyList();
Set<Long> l = Collections.emptySet();
Map<Date, String> d = Collections.emptyMap();