Apa iku Opsional?
Parameter Opsional digunakake kanggo nindakake obyek lan ngaktifake referensi null kanggo ditangani dening macem-macem API. Ayo ndeleng cuplikan kode:Coffee coffee = new Coffee();
Integer quantity = coffee.getSugar().getQuantity();
Kita duwe conto Kopi sing entuk gula saka conto obyek Gula . Yen kita nganggep yen nilai kuantitas ora tau disetel ing konstruktor Kopi , banjur coffee.getSugar ().getQuantity () bakal ngasilake NullPointerException . Mesthi, kita bisa tansah nggunakake mriksa null lawas apik kanggo ndandani masalah.
Coffee coffee = new Coffee();
Integer quantity = 0;
if (coffee.getSugar() != null) {
quantity = coffee.getSugar().getQuantity();
}
Saiki kabeh katon apik. Nanging nalika nulis kode Jawa, luwih becik kita ora ngleksanakake mriksa null . Ayo ndeleng carane iki bisa rampung nggunakake Opsional.
Cara nggawe Opsional
Ana telung cara kanggo nggawe obyek Opsional:-
saka (Nilai T) - instantiation saka obyek non-null Opsional. Elinga yen nggunakake saka () kanggo ngrujuk menyang obyek null bakal uncalan NullPointerException .
-
ofNullable (Nilai T) - nggawe Nilai Opsional kanggo obyek sing bisa null.
-
kosong () - Nggawe Kayata Opsional sing nggantosi referensi kanggo null .
// пример использования Optional.of(T Value)
String name = "foo";
Optional<String> stringExample = Optional.of(name)
// пример использования Optional.ofNullable(T Value)
Integer age = null;
Optional<Integer> integerExample= Optional.ofNullable(age)
// пример использования Optional.empty()
Optional<Object> emptyExample = Optional.empty();
Dadi sampeyan duwe obyek Opsional. Saiki ayo goleki rong cara utama kanggo Opsional:
-
isPresent () - Cara iki ngandhani apa obyek Opsional ngemot nilai non-null.
-
njaluk () - Retrieves Nilai kanggo Pilihan karo nilai saiki. Elinga yen nelpon njaluk () ing Opsional kosong bakal nyebabake NullPointerException .
Ngapikake Null Priksa karo Opsional
Dadi kepiye carane bisa nambah kode ing ndhuwur? Kanthi Opsional kita bisa mangerteni anané obyek nggunakake isPresent () lan njupuk nggunakake njaluk () . Ayo dadi miwiti dening packaging asil coffee.getSugar () karo Pilihan lan nggunakake isPresent () cara . Iki bakal mbantu kita nemtokake yen getSugar () ngasilake null.Coffee coffee = new Coffee();
Optional<String> sugar = Optional.ofNullable(coffee.getSugar());
int quantity = 0;
if (sugar.isPresent()) {
Sugar sugar = sugar.get();
int quantity = sugar.getQuantity();
}
Deleng ing conto iki, packaging asil coffee.getSugar () menyang Opsional koyone ora nambah nilai, nanging malah nambah alangan. Kita bisa nambah asil kanthi nggunakake apa sing dakanggep minangka fungsi favorit saka kelas Opsional:
-
map (Fungsi<? super T,? ngluwihi U> mapper) - Peta nilai sing ana ing Opsional kanggo fungsi kasedhiya. Yen parameter Opsional kosong, banjur map () bakal bali Optional.empty () .
-
orElse (T liyane) iku versi "khusus" saka cara njaluk () . Bisa entuk nilai sing ana ing Opsional. Nanging, ing cilik saka Opsional kosong, iki bakal bali Nilai liwati kanggo orElse () cara .
Coffee coffee = new Coffee();
Integer quantity = Optional.ofNullable(coffee.getSugar())
.map(it -> it.getQuantity())
.orElse(0);
Iki pancen kelangan - paling aku mikir. Saiki, yen ana nilai kosong, kita ora pengin ngasilake nilai standar, mula kita kudu mbuwang sawetara pengecualian. orElseThrow(Supplier<? ngluwihi X> exceptionSupplier) ngasilake nilai sing ana ing paramèter Opsional, utawa mbuwang pangecualian yen Opsional kosong.
Coffee coffee = new Coffee();
Integer quantity = Optional.ofNullable(coffee.getSugar())
.map(it -> it.getQuantity())
.orElseThrow(IllegalArgumentException::new);
Nalika sampeyan bisa ndeleng, Opsional menehi sawetara kaluwihan:
- abstrak mriksa null
- menehi API kanggo nangani obyek null
- ngidini pendekatan deklaratif kanggo nyatakake apa sing digayuh
Carane dadi efektif karo Opsional
Ing karya, aku nggunakake Pilihan minangka jinis bali nalika cara bisa bali negara "ora ana asil". Aku biasane nggunakake nalika nemtokake jinis bali kanggo cara.Optional<Coffee> findByName(String name) {
...
}
Kadhangkala iki ora perlu. Contone, yen aku duwe cara sing ngasilake int , kayata getQuantity () ing kelas Gula , cara kasebut bisa ngasilake 0 yen asil nol kanggo makili "ora ana jumlah". Saiki, ngerti iki, kita bisa mikir yen parameter Gula ing kelas Kopi bisa diwakili minangka Opsional. Sepisanan, iki katon apik amarga, ing teori, gula ora perlu ana ing kopi. Nanging, iki ngendi aku arep kanggo alamat nalika ora kanggo nggunakake Opsional. Kita kudu ngindhari nggunakake Opsional ing skenario ing ngisor iki:
-
Minangka jinis parameter kanggo POJOs , kayata DTOs . Optionals ora serializable, supaya nggunakake ing POJO ndadekake obyek unserializable.
-
Minangka argumen metode. Yen argumen metode bisa null , banjur saka perspektif kode murni, pass null isih luwih disenengi kanggo pass Opsional. Kajaba iku, sampeyan bisa nggawe cara kakehan kanggo nangani abstrak ora ana argumen metode null.
-
Kanggo makili obyek Koleksi sing ilang. Koleksi bisa kosong, dadi Koleksi kosong , kaya Set utawa Dhaptar kosong , kudu digunakake kanggo makili Koleksi tanpa nilai.
GO TO FULL VERSION