我想在安卓系统中使用@NonNull
注解,但我想不出正确的方法。我给你举个例子:
public void doStuff(@NonNull String s){
//do work with s...
}
因此,当我调用doStuff(null)
时,集成开发环境会给我一个警告。问题是我不能依赖这个注解,因为就像this问题指出的那样,它们不会传播很远。因此,我想对我的方法进行null检查,如下所示:
if(s==null) throw new IllegalAgrumentException();
但是集成开发环境会警告我s==null
总是假的,假设是s!=null
。我想知道做这件事最好的方法是什么。
我个人认为应该有一个像@ShouldntBeNull
这样的注释,它只检查并警告null没有传递给它,而不会在值被null检查时发出警告。
发布于 2016-10-03 17:50:55
为此,您可以使用Objects.requireNonNull。它将在内部执行检查(以便集成开发环境不会显示有关您的函数的警告),并在参数为null
时引发NullPointerException
public MyMethod(@NonNull Context pContext) {
Objects.requireNonNull(pContext);
...
}
如果你想抛出另一个异常或者使用API级别< 19,那么你可以创建你自己的helper-class来实现同样的检查。例如:
public class Check {
public static <T> T requireNonNull(T obj) {
if (obj == null)
throw new IllegalArgumentException();
return obj;
}
}
像这样使用它:
public MyMethod(@NonNull Context pContext) {
Check.requireNonNull(pContext);
...
}
发布于 2016-12-09 10:44:25
Google examples按如下方式进行操作
import static com.google.common.base.Preconditions.checkNotNull;
...
public void doStuff(@NonNull String sParm){
this.sParm= checkNotNull(s, "sParm cannot be null!");
}
发布于 2015-09-20 07:45:35
您可以使用注释样式抑制来禁用该特定的null检查警告,例如:
public MyMethod(@NonNull Context pContext) {
//noinspection ConstantConditions
if (pContext == null) {
throw new IllegalArgumentException();
}
...
}
您每次执行此操作时都需要该//noinspection ConstantConditions
。
https://stackoverflow.com/questions/32652402
复制相似问题