Setelah menggunakan Java 8 sekarang selama 6+ bulan atau lebih, saya cukup senang dengan perubahan API baru. Satu area yang saya masih belum percaya adalah kapan harus digunakan Optional
. Saya tampaknya berayun di antara keinginan untuk menggunakannya di mana saja sesuatu mungkin terjadi null
, dan tidak ada tempat sama sekali.
Tampaknya ada banyak situasi di mana saya bisa menggunakannya, dan saya tidak pernah yakin apakah itu menambah manfaat (keterbacaan / keamanan nol) atau hanya menyebabkan overhead tambahan.
Jadi, saya punya beberapa contoh, dan saya akan tertarik pada pemikiran masyarakat tentang apakah Optional
itu bermanfaat.
1 - Sebagai tipe pengembalian metode publik saat metode tersebut dapat kembali null
:
public Optional<Foo> findFoo(String id);
2 - Sebagai parameter metode saat param mungkin null
:
public Foo doSomething(String id, Optional<Bar> barOptional);
3 - Sebagai anggota opsional kacang:
public class Book {
private List<Pages> pages;
private Optional<Index> index;
}
4 - Dalam Collections
:
Secara umum saya tidak berpikir:
List<Optional<Foo>>
menambahkan sesuatu - terutama karena seseorang dapat menggunakan filter()
untuk menghapus null
nilai dll, tetapi apakah ada kegunaan yang baik untuk Optional
koleksi?
Adakah kasus yang saya lewatkan?
.filter(Optional::absent)
"
getOrDefault()
?
Map<Character, String>
. Jika tidak ada substitusi saya dapat menggunakan ini:Optional.ofNullable(map.get(c)).orElse(String.valueOf(c))
. Perhatikan juga bahwa Opsional dicuri dari Guava dan memiliki sintaks yang jauh lebih baik:Optional.fromNullable(map.get(c)).or(String.valueOf(c));