参数检查或java中的Design-by-Contract(GWT)。从哪儿开始?

时间:2009-05-15 12:06:18

标签: java design-by-contract

我正在玩GWT。我正在寻找基本的参数检查。我不要求不变量或结果确保。 我对这个主题的最佳实践感兴趣。

例如,在c#中我使用以下选项之一:

  1. if (arg1 != null) throw new ArgumentNulException....; // Official for public API;
  2. Args.NotNull(arg1); // Home grown.
  3. Contracts.Requires(arg1 != null); // Internal contract validation.
  4. 我开始的最佳位置是什么?

    好的,我现在找到了。

    1. Validate method arguments
    2. Programming With Assertions

3 个答案:

答案 0 :(得分:2)

根据Josh Bloch的Effective Java的建议,我通常只是自己做,所以:

if (arg == null) throw new NullPointerException("arg cannot be null");

if (arg < 0) throw new IllegalArgumentException("arg must be positive");

如果您还没有Effective Java,我强烈建议您获取{{3}}的副本。

答案 1 :(得分:0)

根据wikipedia page of Design by Contract,使用Java的这种方法的流行工具是:

iContract2,Contract4J,jContractor,Jcontract,C4J,CodePro Analytix,STclass,Jass预处理器,带AspectJ的OVal,Java建模语言(JML),Spring框架的SpringContracts,或现代Jass,使用AspectJ的Custos,使用AspectJ的JavaDbC, JavaTESK使用Java扩展。

阅读其中一篇可能是一个好主意。

我没有任何个人经验,但实用程序员说原始iContract的好东西,所以这可能是一个好的起点。

您可以通过使用Javas内置断言来自行尝试:

assert Expression1;

assert Expression1 : Expression2 ;

其中Expression1导致布尔值,Expression2是您的测试值(可选)。尝试一下。

答案 2 :(得分:0)

如果你只是在寻找参数检查,那么一个简单的异常检查应该是最好的解决方案。

Exception为您提供了一个比简单断言更好的捕获处理的解决方案。

在这种情况下,按合同设计解决方案肯定是过度杀伤。