1. Pengenalan Optional

java.util.Optional adalah class java yang dimunculkan semenjak Java 8. Tujuannya untuk mengakomodasi null value atau null reference di Java.

Secara desainnya, java.util.Optional ini ditujukan untuk membedakan secara jelas kembalian tipe yang adalah “no result”

2. Apa yang salah sebelum Optional ini ?

null value/reference menjadi persoalan klasik di Java.
Jika sebuah variable berpotensi menjadi null , maka kita harus selalu melakukan pengecekan terhadap dahulu sebelum melakukan operasi selanjutnya.

null diasosiakan dengan tidak adanya value yang cocok. misalnya untuk case nested null :

person.alamat.kabupaten.key

maka akan dilakukan nested checking. Akan jadi ugly karena nested checked, dan juga error prone (mudah lupa ngecek)

jadi menggunakan null sebagai penanda tidak adanya objec, adalah pendekatan yang salah.

Bahasa lain mencoba membuat pengecekan dengan cara yang lebih simple :

  • groovy, dengan ?. dan elvis operator. String version = computer?.getSoundcard()?.getUSB()?.getVersion(); String version = computer?.getSoundcard()?.getUSB()?.getVersion() ?: “UNKNOWN”;

  • Haskell dengan Maybe

  • Scala dengan Option

Java 8 ini terinspirasi oleh Haskell dan Scala. Optional adalah single-value container that either contains a value or doesn’t (it is then said to be “empty”) Tujuannya adalah agar developer mengerti kalau nilainya itu dengan Optinal memaksa berfikir kalau nilainya bisa ada atau tidak. (seperti kontrak).

Jadi bukan tujuannya untuk menggantikan semua yang null reference. Tetapi lebih ke design kontrak API Pakai java 8 :

tring name = computer.flatMap(Computer::getSoundcard) .flatMap(Soundcard::getUSB) .map(USB::getVersion) .orElse(“UNKNOWN”);

Contoh :

1if (product != null) {
2    System.out.println("Nama Produk adalah " + product.getName());
3}
  1. Optional itu mengingatkan orang untuk mengecek casenya ada yg null;
  2. Adaptasi dengan functional programming style

https://www.oracle.com/technical-resources/articles/java/java8-optional.html