我正在玩GWT。我正在寻找基本的参数检查。我不要求不变量或结果确保。 我对这个主题的最佳实践感兴趣。
例如,在c#中我使用以下选项之一:
if (arg1 != null) throw new ArgumentNulException....; // Official for public API;
Args.NotNull(arg1); // Home grown.
Contracts.Requires(arg1 != null); // Internal contract validation.
我开始的最佳位置是什么?
好的,我现在找到了。
答案 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为您提供了一个比简单断言更好的捕获处理的解决方案。
在这种情况下,按合同设计解决方案肯定是过度杀伤。