gpt4 book ai didi

java - junit 无法捕获通用异常

转载 作者:行者123 更新时间:2023-12-02 07:32:15 25 4
gpt4 key购买 nike

java代码:

public static <T extends Throwable> void checkNotNull(Object value, String name, Class<T> exceptionClass) throws T, SecurityException, IllegalArgumentException, NoSuchMethodException, InstantiationException, IllegalAccessException, InvocationTargetException {
if (value==null)
throw ExceptionHelper.constructException(exceptionClass, name + " should not be null");
}

static <T extends Throwable> T constructException(java.lang.Class<T> exceptionClass, String message) throws SecurityException, NoSuchMethodException, IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException {
Constructor<T> constructor = exceptionClass.getConstructor(String.class);
T result = constructor.newInstance(message);
return result;
}

junit 代码:

@Test
public void testCheckNotNull() {
try {
ValidationUtility.checkNotNull(null, "valuename", exceptionClass);
} catch (T e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

然后编译器说:不能在 catch block 中使用类型参数 T

那么如何解决这个问题呢?

最佳答案

由于 T 在编译时未知,因此您不能在这样的 catch block 中使用它。编译器根本不支持它,因此会出现错误。

如果您的目的是验证是否引发了正确的异常,我建议您像这样修改测试代码:

@Test
public void testCheckNotNull() {
try {
ValidationUtility.checkNotNull(null, "valuename", exceptionClass);
} catch (Throwable e) {
assertEquals(exceptionClass, e.getClass());
}
}

关于java - junit 无法捕获通用异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12747673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com