14

我想对我的方法参数进行空检查,比如参数不应该为空。assertNotNull("Map should not be null", filePaths);在我的 Java 代码中使用这样的东西可以吗?我试图避免

if(filePaths == null){
  throw new IllegalArgumentException("Maps cannot be null");
}

只是为了让我的代码免受所有这些空检查的影响。我知道我可以编写Validator自己的类并拥有重载的notNull方法,但是是否存在一些现有且易于使用的东西,而不是重新发明轮子。

我看到使用的唯一缺点JUnit Assert是它会抛出AssertionError而不是IllegalArgumentException等等。

4

2 回答 2

13

如果您使用 Java 7+,则可以使用:

Objects.requireNonNull(filePaths, "Map should not be null");

同样使用 null 参数,我希望出现 NullPointerException 或 IllegalArgumentException,但不会出现 AssertionError。

于 2013-07-12T17:28:02.413 回答
11

不,使用它是不行的。JUnit 断言方法抛出一个AssertionError。在生产代码中抛出错误不是一个好主意。从javadoc:

Error 是 Throwable 的子类,表示合理的应用程序不应尝试捕获的严重问题。大多数此类错误是异常情况。ThreadDeath 错误虽然是“正常”情况,但也是 Error 的子类,因为大多数应用程序不应该尝试捕获它。方法不需要在其 throws 子句中声明任何可能在方法执行期间抛出但未被捕获的 Error 子类,因为这些错误是不应该发生的异常情况。也就是说,为了对异常进行编译时检查,Error 及其子类被视为未经检查的异常。

于 2013-07-12T17:30:29.117 回答