1

例如,在您的一个 DAO 对象中编写方法时,并且您不希望此方法接受某些输入,为了讨论,说它不允许空参数。考虑到这种方法将来可能会被新的团队成员重用,你将如何实现它。

我这样做的方式是:

  1. 在接口中,我在方法 javadoc 中记录了参数 a、b 和 c 不能为空。
  2. 在方法内部,我首先检查空值,如果 a、b 或 c 中的任何一个为空,则抛出 IllegalArgumentException。

但是,如果将来某个开发人员只是读取方法签名并确定它是他/她需要的并开始使用它,而不注意这个细节,更糟糕的测试不会揭示它。不会发生 NULL 指针异常,我们会收到一条有用的错误消息,但我们仍然会在生产中遇到本可以避免的错误。

有没有办法在编译时强制执行?我对此表示怀疑,但是最安全和最防开发人员的方法是什么?

4

3 回答 3

4

我不认为您可以强制执行此编译时间,但您当然可以使方法签名易于理解。

如果您不添加对其中一个验证框架的依赖项,则可以使用JSR 303@NotNull或类似的工具,如Preconditions

使用 JSR 303,您可以执行以下操作:

@NotNull
@Size(min = 2, max = 14)
@UpperCase
private String licensePlate;

或者

@NotNull
@NotEmpty
public String foo(@NotNull @Pattern(regexp="[0-9]") String param) {
   ...
}

查看入门 JSR 303 Bean Validation以获得更全面的示例。

于 2012-03-03T10:26:14.857 回答
1

您可以使用 jsr305 和 findbugs 等静态代码检查工具在提交/发布之前对其进行检查。

public String method(@NonNull String parameter ){
   ...
}

findbugs 注释手册

于 2012-03-03T11:10:17.167 回答
0
  1. 在编译时强制执行最接近的方法是抛出检查异常,这将强制调用者在编译时处理异常。这可能会让他们阅读文档。IllegalArgumentException 未经检查,可能会被忽视。

  2. 保护不可用值的正常做法是在我们识别出一些不可用的东西时返回并添加一条错误消息以供显示。这将防止在该方法中继续执行时可能发生的生产异常,但可能不会完全避免它。

于 2012-03-03T11:06:43.553 回答