2015-09-18 8 views
18

Ich möchte die @NonNull Annotation in Android verwenden, aber ich kann nicht genau den richtigen Weg, um es zu tun. Ich schlage vor, Sie dieses Beispiel:Richtiger Weg zur Verwendung der @NonNull Annotation in Android Studio

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

Also, wenn ich doStuff(null) die IDE rufen gibt mir eine Warnung aus. Das Problem ist, dass ich mich nicht auf diese Annotation verlassen kann, da, wie die this Frage herausstellt, sie sich nicht sehr weit verbreiten. So würde Ich mag eine Null-Check auf meine Methode setzen, wie folgt aus:

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

Aber die IDE, unter der Annahme, dass s!=null, wird mich warnen, dass s==null immer falsch ist. Ich würde gerne wissen, was der beste Weg ist, dies zu tun.

Ich persönlich denke, dass es eine Anmerkung wie @ShouldntBeNull dass nur Kontrollen und warnt davor, dass null nicht an sie übergeben wird, aber nicht beschwert sich, wenn der Wert null überprüft wird.

+1

folgt "Ich würde gerne wissen, was der beste Weg, dies zu tun" - dort sollte ein Quick-Fix in der IDE sein, um diese Warnung zu unterdrücken. "Ich persönlich denke ..." - Sie können [Feature-Anfrage senden] (https://code.google.com/p/android/issues/list), wenn Sie möchten. – CommonsWare

+0

@CommonsWare Es scheint keinen schnellen 'SuppressWarning'-Fix in Android Studio 1.3.2 zu geben. – MMauro

+0

Nun, das stinkt. :-( – CommonsWare

Antwort

5

Sie können den Kommentar-Stil Unterdrückung verwenden, die bestimmte Nullprüfung Warnung zu deaktivieren, z.B .:

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

Sie müssen, dass //noinspection ConstantConditions jedes Mal, wenn Sie es tun.

9

Sie können Objects.requireNonNull dafür verwenden. Dabei wird sich die Prüfung intern (also die IDE werden keine Warnung auf Ihrer Funktion zeigen) und ein NullPointerException erhöhen, wenn der Parameter null:

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

Wenn Sie eine andere Ausnahme werfen wollen oder API-Ebene < 19 verwenden, Dann können Sie einfach Ihre eigene Helfer-Klasse erstellen, um den gleichen Check zu implementieren. z.B.

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

und es verwenden, etwa so:

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

vielleicht auch [ Diese Antwort] (http://stackoverflow.com/a/41679666/6287240) ist nützlich – TmTron

5

Google examples es tun, wie

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

... 

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