Qual é a diferença entre Collections.emptyList () e Collections.EMPTY_LIST

Respostas:

130
  • Collections.EMPTY_LIST retorna um estilo antigo List
  • Collections.emptyList() usa inferência de tipo e, portanto, retorna List<T>

Collections.emptyList () foi adicionado em Java 1.5 e provavelmente é sempre preferível . Dessa forma, você não precisa lançar mão desnecessariamente em seu código.

Collections.emptyList()faz o elenco intrinsecamente para você .

@SuppressWarnings("unchecked")
public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
}
poitroae
fonte
1
Não estou 100% certo disso, mas acredito que usar / retornar a versão não digitada (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) faz com que o compilador desista da verificação de tipo de genérico dentro da cadeia de chamada fornecida. Basicamente, ele percebe que se desviou para o código antigo, sem tipos genéricos, e desiste.
Matt Passell
18

Vamos à fonte:

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

e

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

Eles são objetos absolutamente iguais.

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

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

O único é que emptyList()retorna genérico List<T>, portanto, você pode atribuir essa lista à coleção genérica sem quaisquer avisos.

Andremoniy
fonte
13

Em outras palavras, EMPTY_LIST não é seguro para o tipo:

  List list = Collections.EMPTY_LIST;
  Set set = Collections.EMPTY_SET;
  Map map = Collections.EMPTY_MAP;

Em comparação com:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
mel3kings
fonte