1

我在玩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.

什么是我最好的起点?

好的,我现在找到了什么。

  1. 验证方法参数
  2. 断言编程
4

3 回答 3

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,我强烈建议您购买它。

于 2009-05-15T12:42:40.353 回答
0

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

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

在那种情况下,按合同设计的解决方案绝对是矫枉过正。

于 2009-09-19T21:39:53.257 回答
0

根据Design by Contract 的维基百科页面,这种方法与 Java 的流行工具是:

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

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

我对其中任何一个都没有亲身经历,但 Pragmatic Programmer 对原始 iContract 说了很多好话,因此这可能是一个不错的起点。

您总是可以尝试使用 Java 内置断言自己做:

assert Expression1;
或者
assert Expression1 : Expression2 ;

其中 Expression1 产生一个布尔值,而 Expression2 是您的测试值(可选)。试试看。

于 2009-05-15T12:11:54.467 回答