Kami telah mulai menggunakan FindBugs dan menjelaskan parameter kami dengan @Nonnull
tepat, dan berfungsi baik untuk menunjukkan bug di awal siklus. Sejauh ini kami terus memeriksa argumen ini untuk null
menggunakan Guava checkNotNull
, tapi saya lebih suka untuk memeriksa null
hanya 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 @Nonnull
itu tidak memblokir null
nilai-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 null
mana saja mereka diedarkan di sistem? Apakah saya naif ingin mempercayai alat ini dan menghindari cek verbose ini?
Intinya: Meskipun tampaknya aman untuk menghapus null
pemeriksaan 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 @Nonnull
anotasi.
@Nonnull
: sebagai spesifikasi kontrak. Saya telah menghapus cek defensif di belakang kontrak dan sejauh ini tidak mengalami kesulitan.