我想对我的方法参数进行空检查,比如参数不应为null。在我的Java代码中使用类似assertNotNull("Map should not be null", filePaths);
的东西可以吗?
我试图避免
if(filePaths == null){
throw new IllegalArgumentException("Maps cannot be null");
}
只是为了保持我的代码清除所有这些空检查。我知道我可以自己编写一个Validator
类并且重载notNull
方法,但是有一些现有的东西可以用来重新发明轮子。
我看到使用JUnit
Assert
的唯一缺点是它会抛出AssertionError
而不是IllegalArgumentException
等等。
答案 0 :(得分:12)
如果您使用Java 7+,则可以使用:
Objects.requireNonNull(filePaths, "Map should not be null");
同样使用null参数,我会期望NullPointerException或IllegalArgumentException,但不是AssertionError。
答案 1 :(得分:9)
不,使用它不行。 JUnit断言方法抛出AssertionError。在生产代码中抛出Error并不是一个好主意。来自javadoc:
错误是Throwable的子类,表示严重问题 一个合理的应用程序不应该试图抓住。最多的 错误是异常情况。 ThreadDeath错误,虽然是 "正常" condition,也是Error的子类,因为大多数 应用程序不应该试图抓住它。不需要方法 在其throws子句中声明可能是Error的任何子类 在执行该方法期间抛出但未捕获,因为这些 错误是不应该发生的异常情况。那就是错误 及其子类被视为未经检查的例外 编译时检查异常的目的。