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:
- Convertir JSONArray a Array de cadenas
- Java.lang.ClassCastException: android.os.ResultReceiver no se puede convertir en com.hello.utils.network.MyReciever
- Cómo evitar el encadenamiento de varias llamadas AsyncTask?
- Cómo depurar un servicio de fondo de Android?
- ListView onScroll añadir más elementos
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.
- ¿Cómo solucionar este error en Android? Java.net.MalformedURLException: Protocolo no encontrado:
- Map.clear () vs nuevo Mapa: ¿Cuál será mejor?
- Cómo obtener correo electrónico de usuario en GraphRequest.newMeRequest
- Casos de uso adecuados para Android UserManager.isUserAGoat ()?
- GCM de Android InstanceId.getToken () -> java.io.IOException: TIMEOUT
- Asegúrese de que el nombre de clase existe, es público y tiene un constructor vacío para fragmento público con nombre de clase y constructor vacío
- Android Shared Service?
- ¿Cómo imprimo el contenido de la solicitud httprequest?
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!"); }