是否可以从断言方法引发自定义异常?

Fed*_*zza 5 java assert

我必须验证包含大约 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 但我需要生成我的自定义异常。

fab*_*ian 1

您可以使用自己的函数:

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)