我想减少 Java 中的冗余和冗长的空检查,但我知道 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或合同的任何好处?
代码契约,而不是你用Java编写的,可以静态分析,如果违反,会给出构建错误。您编写的 Java 代码只会给出运行时错误。
例如,如果将方法上的参数标记为 Not Null,然后尝试在不执行 null 检查的情况下在更高的层调用它,则会收到错误。这不是编译时错误,因为代码协定是静态分析器的一部分,因此,如果您在 Visual Studio 或实现代码协定静态分析器的其他产品之外进行编译,则不会捕获它。
有关更多详细信息,请参阅此文档。