gpt4 book ai didi

java - 一个 Exception 方法,它记录并抛出异常,该异常作为参数出现

转载 作者:太空宇宙 更新时间:2023-11-04 12:08:27 25 4
gpt4 key购买 nike

我有一个 Util 类,在这个类中,我试图实现一个简单的方法,它记录即将到来的消息并抛出发送的异常。由于(可能)简单的原因,我无法实现它。

我当前的方法看起来像这样;

 public static void handleException( Exception exception, String errorMessage )
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw new IllegalArgumentException( errorMessage + "\n " + aException.getMessage() );
}

但是,我不仅想要 IllegalArgumentException,还想要异常的类型,该异常作为参数发送(也称为异常)。

 public static void handleException( FooException exception, String errorMessage )
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw new FooException( errorMessage + "\n " + aException.getMessage() );
}

哪种方式是实现这一目标的最佳方式?

最佳答案

您可以向该方法添加类型参数,然后重新抛出原始异常:

public static <T extends Exception> void handleException(
T exception,
String errorMessage
) throws T
{
LOGGER.error( errorMessage + "\n " + exception.getMessage() );
throw exception;
}

不过,您将无法更改其消息。

要更改其消息,您必须构造一个新消息,这意味着您必须知道其构造函数采用哪些参数。大多数 Exception 子类都接受消息字符串并“导致”异常,但绝不是全部。不过,如果我们做出这样的假设:

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;
}

或者类似的东西......

关于java - 一个 Exception 方法,它记录并抛出异常,该异常作为参数出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40104707/

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