Forma correcta de usar la anotación @NonNull en Android Studio

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

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

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

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

Pero el IDE, suponiendo que s!=null , me advierte que s==null es siempre false. 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 sólo verifica y advierte que null no se pasa a ella, pero no se queja cuando el valor es nulo.

Puede utilizar Objects.requireNonNull para ello. Hará la comprobación internamente (por lo que el IDE no mostrará una advertencia sobre su función) y levantar una NullPointerException cuando el parámetro es null :

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

Si desea lanzar otra excepción o usar el nivel de API <19, puede hacer su propia clase auxiliar para implementar la misma comprobación. p.ej

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

y utilizarlo así:

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

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

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

Usted necesitará que //noinspection ConstantConditions cada vez que lo haga.

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!"); } 
  • Implementación de funciones USSD. Vincular un servicio a PhoneUtils sin reiniciar el teléfono en cada actualización
  • Java.lang.IllegalArgumentException: La ruta no debe estar vacía en Picasso
  • Transferencia PrivateKey de KeyStore, uso en OpenSSL con JNI
  • Usar código Ada en Android
  • Buscar SOAPAction desde un WSDL
  • Gradle Sync Falló - Android Studio 2.3.1
  • ¿Mis avisos de tarjeta de crédito no siempre descartan cuando se pasa a la izquierda oa la derecha?
  • ¿Cuál es la notación de puntos entre los nombres de las clases y qué significa?
  • ¿Cómo puedo manejar los cambios de orientación de la pantalla cuando un diálogo está abierto?
  • Polygon Detección táctil Google Map API V2
  • Cómo evitar objetos duplicados en la base de datos DB4o
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.