Saya melihat beberapa metode di java dinyatakan sebagai:
void foo(@Nullable Object obj)
{ ... }
Apa artinya di @Nullable
sini? Apakah ini berarti inputnya bisa null
?
Tanpa anotasi, input masih bisa nol, jadi kurasa bukan itu saja?
java
annotations
pengguna1508893
sumber
sumber
@Nullable
dalam konteks pertanyaan Anda? Apakah ini Pemeriksa?Jawaban:
Itu memperjelas bahwa metode menerima nilai nol, dan bahwa jika Anda mengganti metode, Anda juga harus menerima nilai nol.
Ini juga berfungsi sebagai petunjuk untuk penganalisa kode seperti FindBugs . Misalnya, jika metode seperti itu meringkas argumennya tanpa memeriksa nol terlebih dahulu, FindBugs akan memancarkan peringatan.
sumber
Anotasi ini biasanya digunakan untuk menghilangkan
NullPointerExceptions
.@Nullable
mengatakan bahwa parameter ini mungkinnull
. Contoh yang baik dari perilaku tersebut dapat ditemukan di Google Guice . Dalam kerangka kerja injeksi ketergantungan ringan ini Anda dapat mengatakan bahwa ketergantungan ini mungkinnull
. Jika Anda mencoba untuk lulusnull
tanpa anotasi, kerangka kerja akan menolak untuk melakukan tugasnya.Terlebih lagi
@Nullable
mungkin digunakan dengan@NotNull
anotasi. Di sini Anda dapat menemukan beberapa tips tentang cara menggunakannya dengan benar. Inspeksi kode di IntelliJ memeriksa anotasi dan membantu men-debug kode.sumber
Alat yang berbeda dapat menafsirkan makna secara
@Nullable
berbeda. Misalnya, Framework Checker dan FindBugs menangani secara@Nullable
berbeda .sumber
Memang, ada pemikiran yang sangat berbeda, di dunia saya, saya tidak bisa memaksakan "Never pass a null" karena saya berurusan dengan pihak ketiga yang tidak terkendali seperti penelepon API, catatan database, mantan programmer dll ... jadi saya paranoid dan defensif dalam pendekatan . Karena Anda menggunakan Java8 atau lebih baru, ada pendekatan yang sedikit lebih bersih daripada
if
blok.Anda juga dapat melempar beberapa pengecualian di sana dengan bertukar
.orElse
keorElseThrow(() -> new Exception("Dont' send a null"))
.Jika Anda tidak ingin menggunakan @Nullable, yang tidak menambahkan apa-apa secara fungsional, mengapa tidak hanya memberi nama parameter dengan
mayBe...
begitu niat Anda jelas.sumber