support nonnull error annotation java android annotations non-nullable

java - nonnull - android support annotation nullable



Forma correcta de usar la anotaciĆ³n @NonNull en Android Studio (3)

Me gustaría usar la anotación @NonNull en Android, pero no puedo encontrar la manera correcta de hacerlo. Te propongo este ejemplo:

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

Entonces cuando llame a doStuff(null) el IDE me dará una advertencia. El problema es que no puedo confiar en esta anotación ya que, como señala this pregunta, no se propagan muy lejos. Así que me gustaría poner un cheque nulo en mi método, como este:

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

Pero el IDE, suponiendo que s!=null , me advertirá que s==null siempre es falso. Me gustaría saber cuál es la mejor manera de hacer esto.

Personalmente, creo que debería haber una anotación como @ShouldntBeNull que solo comprueba y advierte que no se le pasa nulo, pero no se queja cuando se comprueba el valor.


Puede utilizar la supresión de estilo de comentario para deshabilitar esa advertencia específica de comprobación nula, por ejemplo:

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

Necesitará que //noinspection ConstantConditions cada vez que lo haga.


Puedes usar Objects.requireNonNull para eso. Hará la verificación internamente (por lo que el IDE no mostrará una advertencia en su función) y NullPointerException una NullPointerException cuando el parámetro sea null :

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

Si desea lanzar otra excepción o usar el nivel de API <19, entonces puede crear su propia clase de ayuda para implementar la misma verificación. p.ej

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

y utilízalo así:

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


Los ejemplos de Google lo hacen de la siguiente manera

import static com.google.common.base.Preconditions.checkNotNull; ... public void doStuff(@NonNull String sParm){ this.sParm= checkNotNull(s, "sParm cannot be null!"); }