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.