Заставить Java Immutables генерировать toString () для классов Throwable - PullRequest
0 голосов
/ 11 сентября 2018

Можно ли заставить библиотеку обработки аннотаций 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 Ответ

0 голосов
/ 11 сентября 2018

Есть один такой способ.Хитрость заключается в объявлении абстрактной 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...