Apa perbedaan antara Collections.emptyList () dan Collections.EMPTY_LIST


Jawaban:


130
  • Collections.EMPTY_LIST mengembalikan gaya lama List
  • Collections.emptyList() menggunakan tipe-inferensi dan karena itu mengembalikan List<T>

Collections.emptyList () telah ditambahkan di Java 1.5 dan mungkin selalu lebih disukai . Dengan cara ini, Anda tidak perlu membuang-buang kode.

Collections.emptyList()secara intrinsik melakukan pemeran untuk Anda .

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

1
Saya tidak 100% yakin akan hal ini, tetapi saya percaya bahwa menggunakan / mengembalikan versi yang tidak diketik (EMPTY_LIST / EMPTY_SET / EMPTY_MAP) menyebabkan kompilator menyerah pada pemeriksaan jenis generik dalam rantai panggilan yang diberikan. Ini pada dasarnya menggambarkan bahwa ia telah mengembara ke kode lama yang tidak memiliki tipe generik dan menyerah.
Matt Passell

18

Mari kita ke sumbernya:

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

dan

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

13

Mereka adalah objek yang benar-benar sama.

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

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

Satu-satunya adalah yang emptyList()mengembalikan generik List<T>, sehingga Anda dapat menetapkan daftar ini ke koleksi generik tanpa peringatan apa pun.


13

Dengan kata lain, EMPTY_LIST bukan tipe aman:

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

Jika dibandingkan dengan:

    List<String> s = Collections.emptyList();
    Set<Long> l = Collections.emptySet();
    Map<Date, String> d = Collections.emptyMap();
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.