Dina iki aku bakal nuduhake sampeyan teknik sing gampang kanggo ngindhari NullPointerException ing aplikasi sampeyan. Iku gampang kanggo tindakake, nanging Ngartekno nambah linuwih lan kualitas kode. Kajaba iku, ing pengalamanku, tip pisanan bakal duwe pengaruh sing nyata babagan kualitas kode sampeyan. Yen sampeyan ngerti trik pemrograman Java liyane, aja ragu-ragu kanggo nuduhake ing komentar.
Gunakake
Ana akeh perpustakaan open source sing njupuk beban abot saka testing kanggo Coba ora bali
Iki minangka tip pemrograman Java liyane sing digambarake Joshua Bloch ing bukune Java: Programming Efektif. Nalika bali nglumpukke kosong utawa susunan, priksa manawa cara dhasar nelpon kaya
Nelpon metode equals () lan equalsIgnoreCase () ing string literal sing dikenal tinimbang obyek sing ora dingerteni
Tansah nelpon caraequals()
ing senar dikenal sing ngerti ora null
. Cara equals()
kasebut simetris, yaiku nelpon a.equals(b)
lan b.equals(a)
bakal menehi asil sing padha (yen a
lan b
ora null
), lan mulane akeh programer ora menehi perhatian marang obyek sing diarani equals()
, y a
utawa y b
. Salah sawijining efek samping yaiku NullPointerException yen metode kasebut diarani null
.
Object unknownObject = null;
//плохой способ - может вызвать NullPointerException
if(unknownObject.equals("knownObject")){
System.err.println("This may result in NullPointerException if unknownObject is null");
}
//правильный способ - исключение NullPointerException не возникнет, даже если unknownObject null
if("knownObject".equals(unknownObject)){
System.err.println("better coding avoided NullPointerException");
}
Iki minangka tip paling gampang kanggo ngindhari NullPointerException, nanging mung nggawe dandan gedhe amarga cara kasebut equals()
ditemokake ing endi wae.
Pilih valueOf () liwat toString () ing kasus loro-lorone ngasilake asil sing padha
Wiwit nelpontoString()
referensi karo Nilai null
uncalan NullPointerException, iku luwih apik kanggo nggunakake nelpon valueOf()
nalika kita bisa njaluk asil padha, wiwit nelpon valueOf()
saka null
bali null
. Iki utamané bener kanggo kelas wrapper kayata Integer
, Float
, Double
utawa BigDecimal
.
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //не выбрасывает NPE
System.out.println(bd.toString()); //выбрасывает "Exception in thread "main" java.lang.NullPointerException"
Gunakake tips iki yen sampeyan ora yakin apa obyek bisa ana null
utawa ora.
Gunakake null
cara lan perpustakaan sing aman
Ana akeh perpustakaan open source sing njupuk beban abot saka testing kanggo null
. Salah siji sing paling umum yaiku StringUtils
saka Apache Commons. Nggunakake cara kayata StringUtils.isBlank()
, isNumeric()
, isWhiteSpace()
etc. sampeyan ora kudu padha sumelang ing bab uncalan NullPointerException.
//Методы StringUtils являются null-безопасными, они не вызовут NullPointerException
System.out.println(StringUtils.isEmpty(null));
System.out.println(StringUtils.isBlank(null));
System.out.println(StringUtils.isNumeric(null));
System.out.println(StringUtils.isAllUpperCase(null));
Output: bener bener palsu palsu Nanging, sadurunge nggunakake, aja lali kanggo maca dokumentasi null
cara aman lan kelas. Iki minangka salah sawijining trik Java paling apik sing ndadékaké dandan gedhe tanpa mbutuhake gaweyan.
Coba ora bali null
saka cara, luwih becik bali koleksi kosong
Iki minangka tip pemrograman Java liyane sing digambarake Joshua Bloch ing bukune Java: Programming Efektif. Nalika bali nglumpukke kosong utawa susunan, priksa manawa cara dhasar nelpon kaya size()
utawa length()
ora uncalan NullPointerException. Kelas kasebut Collections
kanthi khusus nyatakake implementasine trep saka dhaptar kosong, set lan kamus: Collections.EMPTY_LIST
, Collections.EMPTY_SET
lan Collections.EMPTY_MAP
. Tuladhane:
public List getOrders(Customer customer){
List result = Collections.EMPTY_LIST;
return result;
}
Kajaba iku, sampeyan bisa nggunakake Collections.EMPTY_SET
tinimbang Collections.EMPTY_MAP
bali null
.
Gunakake @NotNull lan @Nullable anotasi
Ing katrangan cara sampeyan, sampeyan bisa nemtokakenull
konvensi safety metode nggunakake anotasi @NotNull
lan @Nullable kanggo nunjukake apa cara bisa bali null
utawa ora. Kompiler lan IDE modern bisa nggunakake anotasi kasebut kanggo nganalisa kode sampeyan lan menehi saran sing cocog, contone, babagan mriksa cek kanggo null
, utawa kosok balene, babagan kemungkinan mbusak mriksa sing ora perlu sing ngalangi kode kasebut. Anotasi kasebut, contone, didhukung dening IntelliJ IDE lan FindBugs, lan uga kalebu JSR 305. Nanging sanajan IDE sampeyan ora ndhukung anotasi kasebut, bakal dadi dokumentasi sing apik ing awake dhewe. Nggoleki @NotNull
lan @Nullable
bakal luwih gampang kanggo programmer ngerti ngendi kanggo nambah mriksa null
lan ngendi ora. Iki, kanthi cara, minangka praktik sing cukup anyar ing antarane programer Jawa, lan butuh wektu kanggo nyebar.
Ngindhari autoboxing lan autounboxing sing ora perlu ing kode sampeyan
Ora mung iki ndadékaké kanggo nggawe obyek sauntara rasah, nanging autoboxing uga bisa uncalan NullPointerException yen kelas pambungkus punikanull
. Contone, kode ing ngisor iki bakal mbuwang NullPointerException yen entri wong ora ngemot nomer telpon lan bali null
.
Person ram = new Person("ram");
int phone = ram.getPhone();
Nalika nggunakake autoboxing utawa autounboxing, ora mung podo, nanging uga inequalities <
> >
bisa nyebabake NullPointerException.
Tindakake konvensi lan nemtokake standar sing cukup.
Salah sawijining cara sing paling apik kanggo ngindhari NullPointerException ing Jawa yaiku ngumumake lan ngetutake konvensi coding. Umume NullPointerExceptions kedadeyan nalika sampeyan nyoba nggawe obyek tanpa kabeh data lan dependensi sing dibutuhake. Kanthi nyegah nggawe obyek sing durung rampung kanthi nolak panjaluk kasebut kanthi apik, sampeyan bakal nylametake dhewe saka akeh NullPointerExceptions ing mangsa ngarep. Kajaba iku, yen sampeyan ngidini nggawe obyek, sampeyan kudu milih nilai standar sing cukup. Contone, obyek kelasEmployee
ora bisa digawe tanpa jeneng lan id
, nanging ora duwe nomer telpon. Ing kasus iki, obyek Employee
tanpa nomer bisa bali nol tinimbang null
. Sanajan prilaku obyek kasebut kudu dipikirake sadurunge - bisa uga luwih gampang dipriksa tinimbang null
nelpon nomer sing ora ana. Ing kasus iki, duwe kahanan tambahan ing lapangan sing ana null
lan sing ora bakal mbantu nggawe keputusan sing bener. Umumé, pilihan antarane langsung nabrak program utawa nemtokake null
iku kaputusan desain penting, lan yen sampeyan wis nggawe pilihan, sampeyan kudu tindakake terus-terusan.
Setel watesan ing tingkat DBMS
Nalika nggunakake database kanggo nyimpen obyek program, kayata Pelanggan utawa Pesenan, iku wicaksana kanggo nemtokake "null
ness" obyek ing tingkat DBMS, nggunakake watesan Tabel cocok. Basis data asring ngemot informasi saka macem-macem sumber, lan ngenalake mriksa kanggo nilai sing ilang bakal nambah integritas data sampeyan. Kajaba iku, anané mriksa kanggo null ing tingkat DBMS bakal nyuda ing kode Jawa: kanthi ngemot data saka database menyang obyek Jawa, sampeyan bisa yakin ing ngarsane lan mbusak rasah " != null
" saka kode program.
Gunakake Pola Objek Null
NggaweNull
obyek khusus minangka cara liya kanggo nyegah NullPointerExcpetion ing Jawa. Ayo nganggep manawa sawetara metode ing aplikasi kita ngasilake obyek sing bakal ditindakake program kasebut kanthi nelpon metode kasebut. Contone, cara Collection.iterator()
ngasilake obyek saka kelas Iterator
sing digunakake kanggo ngulang koleksi. Banjur yen obyek asli ora duwe iterator, null
sampeyan bisa uga ngasilake Null
obyek khusus sing nduweni metode hasNext()
sing tansah ngasilake false
. Mekaten, para maos ingkang minulya, ing ngriki kula mungkasi tips kangge nyingkirake kesalahan NullPointerException ing program Java. Sampeyan bakal ngormati carane migunani aturan sing prasaja lan ora ngebotake iki. Minangka pangeling, yen sampeyan pengin nuduhake trik NullPointerException liyane ing program Jawa, aja ragu-ragu kanggo nindakake ing komentar. Diterjemahake khusus kanggo siswa JavaRush. Asli
GO TO FULL VERSION