Saya dapat melihat itu @Nullabledan @Nonnullpenjelasan dapat membantu dalam mencegah NullPointerExceptiontetapi 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
@Nonnulltidak nol dan akibatnya tidak melakukan pemeriksaan nol.
Kode di bawah menyebabkan parameter yang ditandai dengan @Nonnullmenjadi nulltanpa menaikkan keluhan. Itu melempar NullPointerExceptionketika 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?
@Nonnullketika memanggil @Nonnullmetode 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) ysecara 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).
@Nonnulldan yang @NullableAnda bicarakan, karena ada beberapa pengumuman serupa (Lihat pertanyaan ini ). Apakah Anda berbicara tentang anotasi dalam paket javax.annotation?

@Nullableatau@Nonnull, tetapi jika mereka layak itu sangat "kemungkinan untuk mengumpulkan debat"