Collections.emptyList () ve Collections.EMPTY_LIST arasındaki fark nedir


Yanıtlar:


130
  • Collections.EMPTY_LIST eski tarzı döndürür List
  • Collections.emptyList() tür çıkarımını kullanır ve bu nedenle List<T>

Collections.emptyList () Java 1.5'te eklenmiştir ve muhtemelen her zaman tercih edilir . Bu şekilde, kodunuzun içinde gereksiz yere dolaşmanıza gerek kalmaz.

Collections.emptyList()doğası gereği oyuncu kadrosu sizin için yapar .

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

1
Bundan% 100 emin değilim, ancak türlenmemiş sürümü (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) kullanmanın / döndürmenin, derleyicinin verilen çağrı zinciri içinde jenerik tür kontrolünden vazgeçmesine neden olduğuna inanıyorum. Esasen, jenerik türlerden yoksun eski koda gittiğini ve pes ettiğini anlıyor.
Matt Passell

18

Kaynağa gelelim:

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

ve

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

13

Kesinlikle eşit nesnelerdir.

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

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

Tek emptyList()seçenek List<T>, jenerik döndürmesidir , böylece bu listeyi herhangi bir uyarı olmadan genel koleksiyona atayabilirsiniz.


13

Diğer bir deyişle, EMPTY_LIST tür güvenli değildir:

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

İle karşılaştırıldığında:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.