1

我想减少 Java 中的冗余和冗长的 null 检查,但我知道 Java 没有标准的 @NotNull 注释,因为 c# 有可以使用的合同,例如

Contract.Requires( x != null );

我可能会遗漏一些东西,但我不能自己编写代码吗?

public class Contract {

    public static void requireNotNull(Object object) {
        if ( object == null )
           throw new IllegalArgumentException("Contract forbids null");
    }

}

这是否缺少@NotNull 或合同的任何好处?

4

1 回答 1

2

与您在 Java 中编写的代码不同,代码契约可以进行静态分析,如果违反,将给出构建错误。您编写的 Java 代码只会给出运行时错误。

例如,如果您将方法上的参数标记为 Not Null,然后尝试在更高层调用它而不执行 null 检查,您将收到错误。这不是编译时错误,因为代码契约是静态分析器的一部分,因此,如果您在 Visual Studio 或其他实现代码契约静态分析器的产品之外进行编译,则不会被捕获。

有关更多详细信息,请参阅此文档

于 2017-02-11T00:58:24.370 回答