Meýletin näme?
Meýletin parametr obýektleri götermek we dürli API-ler bilen işlemäge mümkinçilik berýän null salgylanmalary üpjün etmek üçin ulanylýar . Kod parçasyna seredeliň:Coffee coffee = new Coffee();
Integer quantity = coffee.getSugar().getQuantity();
Bizde Şeker obýektiniň mysalyndan şeker alýan kofe mysalymyz bar . Kofe konstruktorynda mukdar bahasynyň hiç haçan kesgitlenmändigini çaklasak , onda coffee.getSugar (). GetQuantity () NullPointerException- y yzyna gaýtaryp berer . Elbetde, meseläni düzeltmek üçin elmydama gowy köne null barlaglary ulanyp bileris.
Coffee coffee = new Coffee();
Integer quantity = 0;
if (coffee.getSugar() != null) {
quantity = coffee.getSugar().getQuantity();
}
Indi hemme zat gowy ýaly. Javaöne Java kody ýazanymyzda, null barlaglary amala aşyrmakdan saklanarys . Meýletin ulanyp nädip edip boljakdygyny göreliň.
Meýletin nädip döretmeli
Goşmaça obýektleri döretmegiň üç usuly bar:-
(T bahasy) - islege bagly däl obýektiň dessine. () Null obýekte ýüzlenmek üçin NullPointerException zyňjakdygyny biliň .
-
ofNullable (T bahasy) - null bolup bilýän obýekt üçin goşmaça baha döredýär.
-
boş () - null salgylanmany görkezýän Goşmaça mysal döredýär .
// пример использования 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();
Şeýlelik bilen, islege bagly obýekt bar. Indi islege bagly iki esasy usula göz aýlalyň:
-
isPresent () - Bu usul, islege bagly obýektiň gymmaty ýokdygyny ýa-da ýokdugyny aýdýar.
-
get () - Häzirki bahasy bilen islege görä bahany alýar. Boş islege jaň etmek () jaň etmegiň NullPointerException- a sebäp boljakdygyny biliň .
Meýletin bilen Null barlagyny gowulandyrmak
Onda ýokardaky kody nädip gowulandyryp bileris? Islege görä, isPresent () ulanyp, obýektiň barlygyna düşünip bileris we get () ulanyp alyp bileris . Kofe.getSugar () netijesini islege görä gaplamak we isPresent () usuly bilen başlalyň . Bu, getSugar () -yň yzyna gaýdyp gelýändigini kesgitlemäge kömek eder .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();
}
Bu mysala seretseň, kofe.getSugar () netijesini islege görä gaplamak hiç hili gymmatlyk däl ýaly, kynçylyk döredýär. Goşmaça synpdan iň halaýan funksiýalarym hasaplap, netijäni gowulaşdyryp bileris:
-
karta (Funksiýa <? super T ,? U> kartany uzadýar) - Berlen funksiýa islege bagly bahany kartalaşdyrýar. Meýletin parametr boş bolsa, karta () Optional.empty () gaýdyp geler .
-
orElse (T other) get () usulynyň “aýratyn” görnüşidir . Islege görä bahany alyp biler. Şeýle-de bolsa, boş islege bagly bolsa, bu orElse () usulyna geçen bahany yzyna gaýtaryp berer .
Coffee coffee = new Coffee();
Integer quantity = Optional.ofNullable(coffee.getSugar())
.map(it -> it.getQuantity())
.orElse(0);
Bu hakykatdanam ajaýyp - iň bolmanda şeýle pikir edýärin. Indi, boş bahasy bar bolsa, deslapky bahany yzyna gaýtarmak islemesek, haýsydyr bir kadadan çykma etmeli. orElseThrow (üpjün ediji <? X uzadýar> kadadan çykma üpjünçiligi) goşmaça parametrlerdäki bahany yzyna gaýtaryp berýär, ýa-da islege görä boş bolsa kadadan çykma atýar.
Coffee coffee = new Coffee();
Integer quantity = Optional.ofNullable(coffee.getSugar())
.map(it -> it.getQuantity())
.orElseThrow(IllegalArgumentException::new);
Görşüňiz ýaly, islege bagly birnäçe artykmaçlyk berýär:
- tezisler _
- null zatlary dolandyrmak üçin API üpjün edýär
- gazanylýanlary aňlatmaga deklaratiw çemeleşmäge mümkinçilik berýär
Meýletin bilen nädip täsirli bolmaly
Işimde, usul “netijesiz” ýagdaýy yzyna gaýtaryp bilse, “Optional” -y yzyna gaýtarma görnüşi hökmünde ulanýaryn. Usullar üçin gaýdyp görnüşleri kesgitlänimde köplenç ulanýaryn.Optional<Coffee> findByName(String name) {
...
}
Käwagt bu zerur däl. Mysal üçin, şeker synpynda getQuantity () ýaly int-ni yzyna gaýtaryp berýän usulym bar bolsa , netijede “mukdar ýok” diýmek üçin netije ýok bolsa, usul 0 yzyna gaýdyp biler. Indi muny bilip, Kofe synpyndaky Şeker parametrini islege bagly diýip görkezip bileris . Bir seretseň, bu gowy pikir ýaly bolup görünýär, sebäbi teoriýa boýunça kofede şekeriň bolmagy hökman däl. Şeýle-de bolsa, islege bagly däl wagty haçan ýüzlenmek isleýärin . Aşakdaky ssenariýalarda islege bagly ulanmakdan saklanmalydyrys:
-
DTO ýaly POJO-lar üçin parametr görnüşleri hökmünde . Opsiýalar yzygiderli bolup bilmeýär, şonuň üçin olary POJO-da ulanmak obýekti tertipsizleşdirýär.
-
Usul argumenti hökmünde. Usul argumenti null bolup bilýän bolsa , arassa kod nukdaýnazaryndan, null geçmek islege bagly däl. Mundan başga-da, null usul argumentiniň ýoklugyny abstrakt çözmek üçin artykmaç usullary döredip bilersiňiz.
-
Collectionok bolan Kolleksiýa obýektini görkezmek. Kolleksiýalar boş bolup biler, şonuň üçin boş ýygyndy ýa-da sanaw ýaly boş ýygyndy , kolleksiýany bahasyz görkezmek üçin ulanylmaly.
GO TO FULL VERSION