Kami telah mulai menggunakan FindBugs dan menjelaskan parameter kami dengan @Nonnulltepat, dan berfungsi baik untuk menunjukkan bug di awal siklus. Sejauh ini kami terus memeriksa argumen ini untuk nullmenggunakan Guava checkNotNull, tapi saya lebih suka untuk memeriksa nullhanya di tepi - tempat-tempat di mana nilainya dapat masuk tanpa diperiksa null, misalnya, permintaan SOAP.
// service layer accessible from outside
public Person createPerson(@CheckForNull String name) {
return new Person(Preconditions.checkNotNull(name));
}
...
// internal constructor accessed only by the service layer
public Person(@Nonnull String name) {
this.name = Preconditions.checkNotNull(name); // remove this check?
}
Saya mengerti bahwa @Nonnullitu tidak memblokir nullnilai-nilai itu sendiri.
Namun, mengingat bahwa FindBugs akan menunjukkan di mana saja nilai ditransfer dari bidang yang tidak ditandai ke yang ditandai @Nonnull, tidak dapatkah kita bergantung padanya untuk menangkap kasus ini (yang memang terjadi) tanpa harus memeriksa nilai-nilai ini untuk di nullmana saja mereka diedarkan di sistem? Apakah saya naif ingin mempercayai alat ini dan menghindari cek verbose ini?
Intinya: Meskipun tampaknya aman untuk menghapus nullpemeriksaan kedua di bawah, apakah ini praktik yang buruk?
Pertanyaan ini mungkin terlalu mirip dengan Haruskah seseorang memeriksa nol jika dia tidak mengharapkan nol , tapi saya bertanya secara spesifik sehubungan dengan @Nonnullanotasi.
@Nonnull: sebagai spesifikasi kontrak. Saya telah menghapus cek defensif di belakang kontrak dan sejauh ini tidak mengalami kesulitan.