2015-09-18 16 views
18

Android'de @NonNull ek notunu kullanmak istiyorum ancak bunu yapmak için doğru yolu bulamıyorum. i doStuff(null) çağırdığınızda Android Studio'da @NonNull ek açıklamasını kullanmanın doğru yolu

public void doStuff(@NonNull String s){ 
    //do work with s...  
} 

Yani IDE bana bir uyarı verecektir: Sana bu örneği öneriyoruz. Sorun şu ki, bu açıklamaya güvenemiyorum çünkü this soru işareti gibi, çok fazla yayılmıyorlar. Yani bunun gibi, benim yöntem üzerinde boş bir çek koymak istiyorum: s!=null varsayarak

if(s==null) throw new IllegalAgrumentException(); 

Ama IDE, s==null hep yanlış olduğunu bana uyaracaktır. Bunu yapmanın en iyi yolunun ne olduğunu bilmek isterim.

Ben şahsen orada @ShouldntBeNullsadece çek gibi bir ek açıklama olabilir ve bu boş kendisine geçirilen değildir uyarıyor gerektiğini düşünüyorum, ama değeri boş işaretlendiğinde şikayet yapmaz.

+1

"Bunu yapmanın en iyi yolu nedir bilmek istiyorum" şöyle

public MyMethod(@NonNull Context pContext) { Check.requireNonNull(pContext); ... } 
CommonsWare

+0

@CommonsWare Android Studio'da hızlı bir 'SuppressWarning' düzeltme görünmüyor. 1.3.2 – MMauro

+0

Peki, bu kokuyor. :-( – CommonsWare

cevap

5

Sen gerekir .:,

public MyMethod(@NonNull Context pContext) { 
     //noinspection ConstantConditions 
     if (pContext == null) { 
      throw new IllegalArgumentException(); 
     } 
     ... 
    } 

örneğin belirli boş çek uyarısı devre dışı bırakmak için açıklama tarzı bastırma kullanabilirsiniz //noinspection ConstantConditions bunu her seferinde söyledi.

9

Bunun için Objects.requireNonNull kullanabilirsiniz. ,

public MyMethod(@NonNull Context pContext) { 
    Objects.requireNonNull(pContext); 
    ... 
} 

başka istisna veya API düzeyi < 19 kullanmak istiyorsanız: Bu içten kontrolü yapmak (bu yüzden IDE sizin fonksiyonu üzerine bir uyarı gösterilmez) ve parametre null olduğunda NullPointerException yükseltecek Daha sonra aynı çeki uygulamak için kendi yardımcı sınıfınızı oluşturabilirsiniz. Örneğin.

public class Check { 
    public static <T> T requireNonNull(T obj) { 
     if (obj == null) 
      throw new IllegalArgumentException(); 
     return obj; 
    } 
} 

ve böylece gibi kullanabilirsiniz:

import static com.google.common.base.Preconditions.checkNotNull; 

... 

public void doStuff(@NonNull String sParm){ 
    this.sParm= checkNotNull(s, "sParm cannot be null!"); 
} 
+0

belki de [ Bu cevap] (http://stackoverflow.com/a/41679666/6287240) yararlıdır – TmTron

5

Google examples

bunu - orada Bu uyarıyı bastırmak için IDE'de hızlı bir düzeltme yapılmalıdır. "Ben şahsen düşünürüm ..." - isterseniz bir özellik isteğinde bulunabilirsiniz (https://code.google.com/p/android/issues/list).
İlgili konular