一种异常方法,它记录并抛出异常,它将作为参数出现

时间:2016-10-18 09:38:22

标签: java exception-handling

我有一个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() );
  }

哪种方式可以实现它?

2 个答案:

答案 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)

为什么不重新抛出你在第一时间得到的例外?

抛出异常;

如果这与您的要求不符,您可以尝试通过从异常中获取类并使用反射来创建新实例(可能会出错,因为可能存在不同的构造函数)

希望有所帮助