@Nulllable ek açıklama kullanımı


347

Java bazı beyan yöntemi olarak gördüm:

void foo(@Nullable Object obj)
{ ... }

Burada ne anlama geliyor @Nullable? Girişin olabileceği anlamına mı geliyor null?

Ek açıklama olmadan, giriş yine de boş olabilir, bu yüzden sanırım sadece bu değil mi?


3
Aşağıdaki yanıtlardan, ek açıklamanın boş değerlerin kabul edilebilir olduğunu, nerede kullanıldığına dair örnekleri, deneyebileceğim kod analizörlerini ve yorumların değişebileceğini gösterdiğini öğrendim. Bu biçimin neden iyi olduğunu görüyor musunuz? + 1'ler her yönüyle, özellikle bu soruyu sorduğunuz için.
icedwater

8
@NullableSorunuz bağlamında hangi kütüphane sunuluyor? Öyle mi Denetleyicisi?
8bitjunkie

Yanıtlar:


367

Yöntemin null değerleri kabul ettiğini ve yöntemi geçersiz kılarsanız null değerleri de kabul etmeniz gerektiğini açıkça belirtir.

Ayrıca FindBugs gibi kod analizörleri için bir ipucu olarak hizmet eder . Örneğin, böyle bir yöntem ilk önce null olup olmadığını denetlemeden argümanını kaldırırsa, FindBugs bir uyarı verir.


82

Bu açıklama genellikle ortadan kaldırmak için kullanılır NullPointerExceptions. @Nullablebu parametrenin olabileceğini söylüyor null. Bu tür davranışlara iyi bir örnek Google Guice'de bulunabilir . Bu hafif bağımlılık enjeksiyon çerçevesinde, bu bağımlılığın olabileceğini söyleyebilirsiniz null. nullEk açıklama olmadan geçmeyi denerseniz , çerçeve bu işi yapmayı reddeder.

Daha fazlası ek açıklama @Nullableile kullanılabilir @NotNull. Burada bunların nasıl doğru kullanılacağı ile ilgili bazı ipuçları bulabilirsiniz . IntelliJ'deki kod denetimi ek açıklamaları kontrol eder ve kodda hata ayıklamaya yardımcı olur.



1

Kabul ediyorum, kesinlikle farklı düşünme var, benim dünyamda, "Asla boş bırakma" yı uygulayamam çünkü API arayanlar, veritabanı kayıtları, eski programcılar vb. Gibi kontrol edilemeyen üçüncü taraflarla uğraşıyorum ... bu yüzden yaklaşımlarda paranoyak ve savunmacıyım . Java8 veya sonraki bir sürümde olduğunuzdan, bir ifbloktan biraz daha temiz bir yaklaşım var .

public String foo(@Nullable String mayBeNothing) {
   return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}

Ayrıca değiştirerek orada biraz istisna atabilen .orElseiçin orElseThrow(() -> new Exception("Dont' send a null")).

İşlevsel olarak hiçbir şey eklemeyen @Nullable kullanmak istemiyorsanız, neden parametreyi neden adlandırmıyorsunuz mayBe...?

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.