我想在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或合约的任何好处?
答案 0 :(得分:2)
代码契约与您在Java中编写的内容相反,可以静态分析,如果违反则会产生构建错误。您编写的Java代码只会产生运行时错误。
例如,如果将方法上的参数标记为Not Null,然后尝试在更高层调用它而不执行空检查,则会出现错误。这不是编译时错误,因为代码约定是静态分析器的一部分,因此如果您在Visual Studio或其他实现代码契约静态分析器的产品之外进行编译,它将不会被捕获。
有关详细信息,请参阅this documentation。