Заставить Java Immutables генерировать toString() для классов Throwable
Можно ли заставить библиотеку обработки аннотаций Java Immutables генерировать метод toString для абстрактного класса, который уже наследует метод toString(), отличный от используемого по умолчанию?
Например:
@Value.Immutables
public abstract class MyRuntimeException extends RuntimeException {
@Value.Default
public abstract long timestamp();
@Value.Redacted
public abstract long secretTimestamp();
}
И результат будет:
MyRuntimeException e = ImmutableMyRuntimeException.builder().timestamp(111)
.secretTimestamp(222).build();
assert e.toString().contains("111");
assert !e.toString().contains("222");
RuntimeException наследует toString() от Throwables, и то, что я видел до сих пор, библиотека Immutables пропускает генерацию toString() из-за этого.
1 ответ
Решение
Есть один такой способ. Хитрость заключается в объявлении абстрактного toString
сигнатура метода в типе абстрактного значения.
@Value.Immutable
public abstract class MyRuntimeException extends RuntimeException {
public abstract long timestamp();
public abstract long secretTimestamp();
@Override public abstract String toString(); //<-- forces toString impl
}