1

当你写一个方法时,比如在你的一个DAO对象中,并且你不希望这个方法接受某些输入,为了讨论的缘故,说它不允许null参数。你如何去实现这一点,考虑到这种方法将来可能会被新的团队成员重用。在Java中处理未接受方法参数的最佳方法是什么?

我做到这一点的方法是:

  1. 在接口方面,我是一个变量,b和c不能为空的方法的javadoc里面的文件。
  2. 在方法内部,我检查空值的第一件事情,如果任何a,b或c都为null,那么我抛出一个IllegalArgumentException。

但是,如果某些未来的开发人员只是读取方法签名并决定他/她需要什么并开始使用它,而没有关注这些细节,并且更糟糕的测试不会揭示它。 NULL指针异常不会发生,并且我们正在收到一条有用的错误消息,但是我们仍然在生产中遇到了可能已被避免的错误。

有没有办法在编译时强制执行?我对此表示怀疑,但如何做到这一点最安全和最不利于开发者的方式呢?

回答

4

我不认为你可以强制这个编译时间,但你当然可以使方法签名容易理解。

如果您不是我的验证框架之一添加依赖项,您可以使用JSR 303@NotNull或类似的工具,如Preconditions

有了JSR 303,你可以做SUFF,如:

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

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

看一看的Getting started with JSR 303 Bean Validation更全面的例子。

+0

非常酷,我会说,有没有回答这个问题。但是,您的答案应该不仅仅包含一个链接。在Stackoverflow上,我们努力提供将持续多年的内容。如果你的链接被破坏了,那么解释也是如此。你能编辑你的答案来解释这是什么吗? – jmort253 2012-03-03 10:29:01

+0

根据@ jmort253的要求添加示例 – ebaxt 2012-03-03 10:50:23

+0

+1 - 非常有帮助! – jmort253 2012-03-03 10:56:04

0
  1. 尽可能在编译时强制执行的东西是通过抛出检查异常,这会强制调用者在编译时处理异常。这可能会让他们阅读文档。 IllegalArgumentException未经检查,可能会被忽视。

  2. 保护无法使用的值的正常做法是返回到指定的东西不可用并添加显示错误消息。这将防止在该方法继续执行时可能发生的生产异常,但可能不会完全避免。

1

您可以使用静态代码检查工具如findbugs jsr305在提交/发布前检查它。

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

findbugs manual on annotation

相关问题