JavaRush /Java Blog /Random-ID /Trik dan tip. Bagaimana menghindari NullPointerException ...
DarthVictor
Level 28

Trik dan tip. Bagaimana menghindari NullPointerException di aplikasi Java

Dipublikasikan di grup Random-ID
Trik dan tip.  Cara menghindari NullPointerException pada aplikasi Java - 1Hari ini saya akan menunjukkan teknik sederhana tentang cara menghindari NullPointerException di aplikasi Anda. Mereka mudah diikuti, namun secara signifikan meningkatkan keandalan dan kualitas kode Anda. Selain itu, menurut pengalaman saya, tip pertama akan berdampak nyata pada kualitas kode Anda. Jika Anda mengetahui trik pemrograman Java lainnya, silakan bagikan di komentar. Trik dan tip.  Cara menghindari NullPointerException pada aplikasi Java - 2

Panggil metode sama dengan() dan sama denganIgnoreCase() pada literal string yang diketahui, bukan pada objek yang tidak diketahui

Selalu panggil metode equals()pada string yang dikenal, padahal Anda tahu itu bukan string yang dikenal null. Metodenya equals()simetris, yaitu memanggil a.equals(b)dan b.equals(a)akan memberikan hasil yang sama (jika adan btidak null), dan karena itu banyak pemrogram yang tidak memperhatikan objek mana yang dipanggil equals(), y aatau y b. Salah satu efek sampingnya adalah NullPointerException jika metode ini dipanggil 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");
}
Ini adalah tip paling sederhana untuk menghindari NullPointerException, tetapi ini saja sudah memberikan kemajuan besar karena metode ini equals()dapat ditemukan di mana-mana.

Pilih valueOf() daripada toString() jika keduanya menghasilkan hasil yang sama

Karena pemanggilan toString()referensi dengan nilai nullakan memunculkan NullPointerException, lebih baik menggunakan pemanggilan valueOf()ketika kita bisa mendapatkan hasil yang sama, karena pemanggilan valueOf()dari nullreturn null. Hal ini terutama berlaku untuk kelas pembungkus seperti Integer, Float, Doubleatau BigDecimal.
BigDecimal bd = getPrice();
System.out.println(String.valueOf(bd)); //не выбрасывает NPE
System.out.println(bd.toString()); //выбрасывает "Exception in thread "main" java.lang.NullPointerException"
Gunakan tips ini ketika Anda tidak yakin apakah suatu benda bisa ada nullatau tidak.

Gunakan nullmetode dan perpustakaan -safe

Ada banyak perpustakaan sumber terbuka yang menanggung beban berat dalam pengujian null. Salah satu yang paling umum adalah StringUtilsdari Apache Commons. Menggunakan metode seperti StringUtils.isBlank(), isNumeric(), isWhiteSpace()dll. Anda tidak perlu khawatir untuk melempar 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));
Keluaran: benar benar salah salah Namun, sebelum menggunakan, jangan lupa membaca dokumentasi nullmetode dan kelas yang aman. Ini adalah salah satu trik Java terbaik yang menghasilkan peningkatan besar tanpa memerlukan banyak usaha.

Usahakan untuk tidak kembali nulldari suatu metode, lebih baik mengembalikan koleksi yang kosong

Ini adalah tip pemrograman Java bagus lainnya yang dijelaskan Joshua Bloch dalam bukunya Java: Effective Programming. Saat mengembalikan koleksi atau array kosong, pastikan memanggil metode dasar seperti size()atau length()tidak menampilkan NullPointerException. Kelas Collectionssecara khusus mendeklarasikan implementasi yang mudah dari daftar, kumpulan, dan kamus kosong: Collections.EMPTY_LIST, Collections.EMPTY_SETdan Collections.EMPTY_MAP. Misalnya:
public List getOrders(Customer customer){
   List result = Collections.EMPTY_LIST;
   return result;
}
Demikian pula, Anda dapat menggunakannya Collections.EMPTY_SETalih Collections.EMPTY_MAP-alih mengembalikannya null.

Gunakan anotasi @NotNull dan @Nullable

Dalam deskripsi metode Anda, Anda dapat menentukan nullkonvensi keamanan metode menggunakan anotasi @NotNulldan @Nullable untuk menunjukkan apakah suatu metode dapat kembali nullatau tidak. Kompiler dan IDE modern dapat menggunakan anotasi ini untuk menganalisis kode Anda dan memberikan saran yang sesuai, misalnya, tentang hilangnya tanda centang untuk null, atau sebaliknya, tentang kemungkinan menghapus tanda centang yang tidak perlu yang menyumbat kode. Anotasi seperti itu, misalnya, didukung oleh IntelliJ IDE dan FindBugs, dan juga disertakan dalam JSR 305. Namun meskipun IDE Anda tidak mendukung anotasi tersebut, anotasi tersebut akan menjadi dokumentasi yang baik. Melihatnya @NotNulldan @Nullableakan lebih mudah bagi programmer untuk memahami di mana harus menambahkan tanda centang nulldan di mana tidak. Omong-omong, ini adalah praktik yang cukup baru di kalangan pemrogram Java, dan perlu waktu untuk menyebarkannya.

Hindari autoboxing dan autounboxing yang tidak perlu dalam kode Anda

Hal ini tidak hanya menyebabkan pembuatan objek sementara yang tidak perlu, tetapi autoboxing juga dapat memunculkan NullPointerException jika kelas pembungkusnya adalah null. Misalnya, kode berikut akan memunculkan NullPointerException jika entri orang tidak berisi nomor telepon dan mengembalikan null.
Person ram = new Person("ram");
int phone = ram.getPhone();
Saat menggunakan autoboxing atau autounboxing, tidak hanya persamaan, tetapi juga ketidaksetaraan <> >dapat menghasilkan NullPointerException.

Ikuti konvensi dan tentukan standar yang masuk akal.

Salah satu cara terbaik untuk menghindari NullPointerException di Java adalah dengan mendeklarasikan dan mengikuti konvensi pengkodean dengan benar. Kebanyakan NullPointerExceptions terjadi saat Anda mencoba membuat objek tanpa memiliki semua data dan dependensi yang diperlukan. Dengan mencegah pembuatan objek yang belum selesai dengan menolak permintaan tersebut dengan baik, Anda akan menyelamatkan diri Anda dari sejumlah besar NullPointerExceptions di masa mendatang. Demikian pula, jika Anda mengizinkan pembuatan objek, Anda harus memilih nilai default yang masuk akal. Misalnya, objek kelas Employeetidak dapat dibuat tanpa nama dan id, namun mungkin tidak memiliki nomor telepon. Dalam hal ini, objek Employeetanpa nomor mungkin akan menghasilkan nol null. Meskipun perilaku objek seperti itu harus dipikirkan terlebih dahulu - mungkin lebih mudah untuk memeriksanya nulldaripada menelepon nomor yang tidak ada. Dalam hal ini, memiliki ketentuan tambahan tentang bidang mana yang termasuk nulldan mana yang tidak akan membantu membuat keputusan yang tepat. Secara umum, pilihan antara segera menghentikan program atau menugaskannya nullmerupakan keputusan desain yang penting, dan setelah Anda menentukan pilihan, Anda harus mengikutinya secara konsisten.

Tetapkan batasan pada tingkat DBMS

Saat menggunakan database untuk menyimpan objek program Anda, seperti Pelanggan atau Pesanan, sebaiknya tentukan " nullness" objek Anda di tingkat DBMS, dengan menggunakan batasan tabel yang sesuai. Basis data sering kali berisi informasi dari berbagai sumber, dan melakukan pemeriksaan terhadap nilai yang hilang akan meningkatkan integritas data Anda. Selain itu, adanya pemeriksaan null di tingkat DBMS akan menguranginya dalam kode Java Anda: dengan memuat data dari database ke objek Java, Anda dapat memastikan keberadaannya dan menghapus " != null" yang tidak perlu dari kode program.

Gunakan Pola Objek Null

Membuat Nullobjek khusus adalah cara lain untuk menghindari NullPointerExcpetion di Java. Mari kita asumsikan bahwa beberapa metode dalam aplikasi kita mengembalikan objek yang kemudian digunakan oleh program dengan memanggil metodenya. Misalnya, metode Collection.iterator()mengembalikan objek kelas Iteratoryang digunakan untuk melakukan iterasi melalui koleksi. Kemudian jika objek asli tidak memiliki iterator apa pun, nullAnda dapat mengembalikan Nullobjek khusus yang memiliki metode hasNext()yang selalu mengembalikan false. Itu saja, pembaca yang budiman, di sinilah saya mengakhiri tip saya untuk menghilangkan kesalahan NullPointerException pada program Java. Anda akan menghargai betapa bermanfaatnya aturan-aturan sederhana dan tidak memberatkan ini. Sebagai pengingat, jika Anda ingin membagikan trik NullPointerException lainnya di program Java, silakan melakukannya di komentar. Diterjemahkan khusus untuk siswa JavaRush. Asli
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION