Saya dapat melihat itu @Nullable
dan @Nonnull
penjelasan dapat membantu dalam mencegah NullPointerException
tetapi mereka tidak menyebar terlalu jauh.
- Keefektifan anotasi ini menurun sepenuhnya setelah satu tingkat tipuan, jadi jika Anda hanya menambahkan beberapa, mereka tidak menyebar terlalu jauh.
- Karena anotasi ini tidak ditegakkan dengan baik, ada bahaya menganggap nilai yang ditandai dengan
@Nonnull
tidak nol dan akibatnya tidak melakukan pemeriksaan nol.
Kode di bawah menyebabkan parameter yang ditandai dengan @Nonnull
menjadi null
tanpa menaikkan keluhan. Itu melempar NullPointerException
ketika dijalankan.
public class Clazz {
public static void main(String[] args){
Clazz clazz = new Clazz();
// this line raises a complaint with the IDE (IntelliJ 11)
clazz.directPathToA(null);
// this line does not
clazz.indirectPathToA(null);
}
public void indirectPathToA(Integer y){
directPathToA(y);
}
public void directPathToA(@Nonnull Integer x){
x.toString(); // do stuff to x
}
}
Apakah ada cara untuk membuat anotasi ini lebih ketat ditegakkan dan / atau disebarkan lebih lanjut?
@Nonnull
ketika memanggil @Nonnull
metode dengan variabel nullable. Tentu saja, casting dengan anotasi tidak dimungkinkan di Java 7, tetapi Java 8 akan menambahkan kemampuan untuk menerapkan anotasi pada penggunaan variabel, termasuk gips. Jadi ini mungkin untuk diterapkan di Jawa 8.
(@NonNull Integer) y
secara sintaksis mungkin, tetapi kompiler tidak diizinkan untuk memancarkan kode byte tertentu berdasarkan anotasi. Untuk pernyataan runtime, metode pembantu kecil sudah cukup seperti yang dibahas di bugs.eclipse.org/442103 (mis., directPathToA(assertNonNull(y))
) - tetapi ingatlah, ini hanya membantu untuk gagal dengan cepat. Satu-satunya cara yang aman adalah dengan melakukan pemeriksaan nol yang sebenarnya (ditambah semoga implementasi alternatif di cabang lain).
@Nonnull
dan yang @Nullable
Anda bicarakan, karena ada beberapa pengumuman serupa (Lihat pertanyaan ini ). Apakah Anda berbicara tentang anotasi dalam paket javax.annotation
?
@Nullable
atau@Nonnull
, tetapi jika mereka layak itu sangat "kemungkinan untuk mengumpulkan debat"