1

有时我看到程序员使用“断言”,有时我看到对参数进行空检查并抛出异常。

最好的选择是什么?

4

3 回答 3

2

始终考虑到“断言”并不总是启用。这是您应该始终牢记在心的主要规则。将其视为一种机制来检测代码中的错误,不应该发生的意外情况(前置/后置条件)。另一方面,如果有机会从调用者那里获得空值,则抛出异常(即 IllegalArgumentException)。

例如:

  • 如果您正在为第三方创建库,则无法使用 assert 验证参数。
  • 在私有方法中,您可以使用 assert 来包含必须满足的前置/后置条件。
于 2012-05-16T07:57:10.817 回答
0

这取决于你的使用情况,

如果你希望你的参数不明确地为空,那么你应该断言或抛出IllegalArgusmentException

另一方面,如果它没问题,null那么简单检查不为空并分配回退值并继续代码

于 2012-05-16T07:52:24.717 回答
0

我不知道我在哪里读到的,(也许有人会指出),但一般规则是这样的:

1) 对于接口使用 null 检查,因为接口必须处理所有参数,包括 null,但这并不禁止您另外抛出异常。

2) 在特殊情况下抛出异常,例如在不应将 null 作为参数的私有方法中。

3) 使用 assert 但不要过分依赖它,因为它可以被禁用,并且不包含在生成的字节码中。所以在开发时使用它,而不是在真实环境中使用。

于 2012-05-16T08:14:00.573 回答