这是Java的一个不幸的方面是引用可null
并没有办法,因为它们不是语言来指定。
所以一般情况是这样,不要对null
做出解释,也不要陷入以后可能会抛出NPE的情况。
JSR305(现已失效)允许您注释参数声明,他们不应该给予null
秒。
void fn(@Nonnull String a, @Nonnull Integer b, @Nonnull Object c) {
冗长,但是这是Java的为您服务。还有其他的注释库和检查器的功能差不多,但都不是标准的。
(备注大写:当窗体“非物”的骆驼外壳也就是说,standard不是大写航线字,除非它是一个类的名称,以便nonthing
和nonnull
)
除了运行检查程序之外,注释也不会实际执行规则。您可以静态地包括一种方法做检查:
public static <T> T nonnull(T value) {
if (value == null) {
throwNPE();
}
return value;
}
private static void throwNPE() {
throw new NullPointerException();
}
返回的值是很方便的在构造函数:
import static pkg.Check.nonnull;
class MyClass {
@Nonnull private final String thing;
public MyClass(@Nonnull String thing) {
this.thing = nonnull(thing);
}
...
的[?在哪里检查对象为空或不是]可能重复(http://stackoverflow.com/questions/706263/where-to-check-if -an-object-is-null-or-not) – NPE 2011-03-02 20:23:04
另一个问题是关于'.net',但实质上是完全相同的。 – NPE 2011-03-02 20:24:04
目前的答案都没有提到使用注释和静态分析,例如FindBugs @NonNull,@CheckForNull等。另外,虽然这不是上面提到的.Net问题的重复,但它可能至少在stackoverflow中覆盖过一次。 – 2011-03-02 20:48:39