将数据存储在自定义检查的异常中是一个坏主意吗?

时间:2017-10-19 15:28:55

标签: java exception exception-handling

我有一个用例,我想在返回异常时返回一些数据(一个对象)。我考虑将数据存储在我的自定义检查异常类中,并在异常被捕获到堆栈中时通过getter访问它。这被认为是个坏主意吗?如果是这样,有什么更好的选择呢?我已经看到将相关消息发送到自定义的例外,但我们确实没有看到它被用作数据存储。

我偶然发现了Return a value AND throw an exception?并且其中一个答案正在做类似的事情。我更多地考虑重载构造函数和提供对象而不是将其作为另一个参数传递。那被认为是不好的编码实践吗?

  public class NameException extends Exception
{

    private static final long serialVersionUID = -4983060448714460116L;
    private Service externalService;


    public NameException(final String message)
    {
        super(message);
    }

    public NameException()
    {
    }

    public NameException(Service externalService)
    {
        this.externalService =externalService;
    }

    public Service getExternalService()
    {
      return externalService;
    }
}

1 个答案:

答案 0 :(得分:2)

这是既定模式。

例如,Spring的RestTemplate的HTTP请求方法可能抛出RestClientResponseException,其中包含byte[] getResponseBodyAsByteArray()等方法, String getResponseBodyAsString()HttpHeaders getResponseHeaders()String getStatusText()等等。