我有一个用例,当我抛出异常时,我想返回一些数据(对象)。我正在考虑将数据存储在我的自定义检查的异常类中,并在堆栈中捕获到更高的异常时通过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;
    }
}

最佳答案

这是一个既定模式。

例如,Spring的RestTemplate的HTTP请求方法可能会抛出一个RestClientResponseException,该方法具有类似byte[] getResponseBodyAsByteArray()的方法,
String getResponseBodyAsString()
HttpHeaders getResponseHeaders()String getStatusText()等。

09-03 19:52