[java] Collections.emptyList ()와 Collections.EMPTY_LIST의 차이점은 무엇입니까?

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();


답변