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


답변:


130
  • 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;
}

1
100 % 확실하지는 않지만 형식화되지 않은 버전 (EMPTY_LIST / EMPTY_SET / EMPTY_MAP)을 사용 / 반환하면 컴파일러가 지정된 호출 체인 내에서 제네릭 형식 검사를 포기한다고 생각합니다. 그것은 본질적으로 제네릭 유형이없는 오래된 코드로 방황하고 포기했다고 생각합니다.
Matt Passell 2015 년

18

소스로 가자 :

 public static final List EMPTY_LIST = new EmptyList<>();

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

13

그들은 절대적으로 동등한 대상입니다.

public static final List EMPTY_LIST = new EmptyList<>();

public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}

유일한 것은 emptyList()generic 을 반환 List<T>하므로 경고없이 일반 컬렉션에이 목록을 할당 할 수 있습니다.


13

즉, 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();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.