我必须验证包含大约 40 个必填字段的请求。
我想通过避免经典来做到这一点if (field1 == null) throw new XXException("msg");
例如我有以下代码:
if (caller == null)
{
// Caller cannot be empty
throw new CallerErrorException(new CallerError("", "incorrect caller"));
}
if (person == null)
{
// Person cannot be empty
throw new PersonErrorException(new CustomerError("", "incorrect customer"));
}
if (module == null)
{
// Module cannot be empty
throw new ModuleErrorException(new ModuleError("", "module must be X"));
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,根据哪个字段为空,会抛出特定的自定义异常和自定义消息。
所以,我想要这样的东西:
assertNotEquals(call, null, new CallerErrorException(new CallerError("", "incorrect caller")));
assertNotEquals(person, null, new PersonErrorException(new CustomerError("", "incorrect caller")));
assertNotEquals(module , null, new ModuleErrorException(new ModuleError("", "incorrect caller")));
Run Code Online (Sandbox Code Playgroud)
是否有内置功能可以让我执行此操作?
我知道assertEquals 生成一个assertionError 但我需要生成我的自定义异常。
您可以使用自己的函数:
public static <T extends Throwable> void throwIfNotEqual(Object o1, Object o2, T exception) throws T {
if (o1 != o2) {
throw exception;
}
}
Run Code Online (Sandbox Code Playgroud)
如果将此方法与@dasblinkenlight 的方法结合使用,您将受益于仅在需要时才创建异常,并且仍然比“抛出异常”更精确。那么签名将是:
static <T extends Throwable> void checkNull(Object val, Class<T> exClass, Class innerClass, String arg1, String arg2)
throws T, ReflectiveOperationException
Run Code Online (Sandbox Code Playgroud)