好的,所以不允许这样做:
public class ServiceError extends RuntimeException {
private final UUID uuid = UUID.randomUUID();
public ServiceError(...) {
super("{" + uuid.toString() + "} " + ...); // error on reference to uuid
}
但我怎么能做我想要的呢?没有Exception.setMessage
,所以在超级构造函数完成后我无法更改消息,我需要在构造函数中传递UUID。
答案 0 :(得分:7)
我会这样做:
public class ServiceError extends RuntimeException {
private final UUID uuid;
public ServiceError() {
this(UUID.randomUUID());
}
private ServiceError(UUID uuid) {
super("{" + uuid.toString() + "} " + ...);
this.uuid = uuid;
}
}
基本上这只是改变UUID.randomUUID()
调用的位置,并使用构造函数参数来构造超构造参数并在之后将值保存到字段中。
答案 1 :(得分:4)
听起来您可能希望覆盖类中的getMessage()
以返回对您的异常类有意义的消息。
作为一个例子,这里是我的JDK中ActivationException.getMessage()
的样子:
public String getMessage() {
if (detail == null)
return super.getMessage();
else
return super.getMessage() +
"; nested exception is: \n\t" +
detail.toString();
}