C#Contracts vs NotNull /在Java中滚动自己的

时间:2017-02-11 00:34:50

标签: java c# null coding-style contracts

我想在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或合约的任何好处?

1 个答案:

答案 0 :(得分:2)

代码契约与您在Java中编写的内容相反,可以静态分析,如果违反则会产生构建错误。您编写的Java代码只会产生运行时错误。

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

有关详细信息,请参阅this documentation