我有一个Util类,在这个类中,我正在尝试实现一个简单的方法,它记录即将发送的消息并抛出发送的异常。由于(可能)简单的原因,我无法实现它。
我当前的方法看起来像那样;
public static void handleException( Exception exception, String errorMessage )
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw new IllegalArgumentException( errorMessage + "\n " + aException.getMessage() );
}
但是,我不仅希望IllegalArgumentException,而且还希望将异常的类型作为参数(a.k.a异常)发送。
public static void handleException( FooException exception, String errorMessage )
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw new FooException( errorMessage + "\n " + aException.getMessage() );
}
哪种方式可以实现它?
答案 0 :(得分:2)
您可以向方法添加类型参数,然后重新抛出原始异常:
public static <T extends Exception> void handleException(
T exception,
String errorMessage
) throws T
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw exception;
}
但是,你无法改变其信息。
要更改其消息,您必须构建一个新消息,这意味着您必须知道其构造函数采用的参数。大多数Exception
子类接受消息字符串和&#34;原因&#34;例外,但绝不是全部。不过,如果我们做出这样的假设:
public static <T extends Exception> void handleException(
T exception,
String errorMessage
) throws T
{
final String newMessage = errorMessage + "\n " + exception.getMessage();
LOGGER.error(newMessage);
T newException = exception;
try {
newException = (T)exception.getClass()
.getConstructor(new Class[] { String.class, Exception.class })
.newInstance(new Object[] { newMessage, exception});
} catch (Exception) {
}
throw newException;
}
或者那些东西......
答案 1 :(得分:-2)
为什么不重新抛出你在第一时间得到的例外?
抛出异常;
如果这与您的要求不符,您可以尝试通过从异常中获取类并使用反射来创建新实例(可能会出错,因为可能存在不同的构造函数)
希望有所帮助