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 Optionalitu 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 nullnilai dll, tetapi apakah ada kegunaan yang baik untuk Optionalkoleksi?
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));