Bunu görebiliyorum @Nullable
ve @Nonnull
ek açıklamalar s'yi önlemede yardımcı olabilirNullPointerException
ama çok ilerlemiyorlar.
- Bu ek açıklamaların etkinliği bir dolaylı aktarım düzeyinden sonra tamamen düşer, bu nedenle yalnızca birkaçını eklerseniz çok fazla yayılmazlar.
- Bu ek açıklamalar iyi uygulanmadığından, işaretli bir değerin
@Nonnull
null olmadığını ve sonuç olarak null kontrol gerçekleştirmediğini varsayma tehlikesi vardır .
Aşağıdaki kod ile işaretlenmiş bir parametre neden @Nonnull
olmak null
herhangi bir şikayet yükseltmeden. NullPointerException
Çalıştırıldığında bir atar .
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
}
}
Bu ek açıklamaları daha katı hale getirmenin ve / veya daha fazla yaymanın bir yolu var mı?
@Nonnull
çağrıldığında bir döküm gerektiren olduğunu düşünüyorum @Nonnull
. Tabii ki, Java 7'de bir açıklama ile yayın yapmak mümkün değildir, ancak Java 8, dökümler dahil olmak üzere bir değişkenin kullanımına ek açıklama uygulama yeteneği ekleyecektir. Böylece bu Java 8'de uygulamak mümkün olabilir.
(@NonNull Integer) y
sözdizimsel olarak mümkündür, ancak bir derleyicinin ek açıklamaya dayalı olarak belirli bir bayt kodu yayınlamasına izin verilmez. Çalışma zamanı iddiaları için küçük yardımcı yöntemler bugs.eclipse.org/442103 (örn. directPathToA(assertNonNull(y))
) ' De tartışıldığı gibi yeterlidir - ancak unutmayın, bu sadece hızlı başarısızlığa yardımcı olur. Tek güvenli yol, gerçek bir null denetim (artı umarım diğer dalda alternatif bir uygulama) gerçekleştirmektir.
@Nonnull
ve @Nullable
birden çok benzer annoations olduğu gibi (Bkz bahsediyorsun bu soruyu ). Paketteki ek açıklamalardan mı bahsediyorsunuz javax.annotation
?
@Nullable
ya@Nonnull
da değer ise, ancak "solicit tartışma muhtemeldir" çok olduğunu