Lombok: Можно ли использовать toString из суперкласса без «callSuper=true»?

Созданный на 14 нояб. 2016  ·  3Комментарии  ·  Источник: projectlombok/lombok

<strong i="5">@ToString</strong>
class SuperClass {
   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> int id;
   private <strong i="8">@Getter</strong> <strong i="9">@Setter</strong> String date;
}
@ToString(callSuper = true)
class MyClass extends SuperClass {
   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}

Вызов toString из MyClass приводит к следующему результату:

MyClass (super = SuperClass (id = 1, дата = 00/00/0000), поле = тест)

Возможно ли получить что-то вроде этого...

MyClass (id = 1, дата = 00/00/0000, поле = тест)

... напрямую, без манипулирования выходной строкой?


ваше здоровье!

Самый полезный комментарий

Теперь можно использовать что-то вроде

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name="id")
    private int dummyId() {
        return id;
    }

   @ToString.Include(name="date")
    private int dummyDate() {
        return date;
    }

   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> String field;
}

Это, очевидно, выполнимо только для небольшого количества полей (непроверенных).

Лучшей идеей может быть

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name=" ")
    private int dummySuper() {
        return super.toString().replace(".*?\\(((?s:.*))\\)$", "$1");
    }

   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}
  • Использование " " в качестве имени может работать, а может и не работать.
  • В «замене» я предполагаю, что super.toString() сгенерирован (или выглядит так) ломбоком.
  • Вы получаете MyClass( id=1, date=00/00/0000, field=test) с одним пробелом слишком много.

Все 3 Комментарий

Не совсем; мы должны были бы сделать разрешение, чтобы осуществить это, и мы не хотим идти туда для основ ломбока, потому что разрешение очень сложно (проблемы с производительностью и гораздо больше ошибок).

Теперь можно использовать что-то вроде

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name="id")
    private int dummyId() {
        return id;
    }

   @ToString.Include(name="date")
    private int dummyDate() {
        return date;
    }

   private <strong i="6">@Getter</strong> <strong i="7">@Setter</strong> String field;
}

Это, очевидно, выполнимо только для небольшого количества полей (непроверенных).

Лучшей идеей может быть

@ToString(callSuper = false)
class MyClass extends SuperClass {
   @ToString.Include(name=" ")
    private int dummySuper() {
        return super.toString().replace(".*?\\(((?s:.*))\\)$", "$1");
    }

   private <strong i="12">@Getter</strong> <strong i="13">@Setter</strong> String field;
}
  • Использование " " в качестве имени может работать, а может и не работать.
  • В «замене» я предполагаю, что super.toString() сгенерирован (или выглядит так) ломбоком.
  • Вы получаете MyClass( id=1, date=00/00/0000, field=test) с одним пробелом слишком много.

См. соответствующую запись в вики : https://github.com/rzwitserloot/lombok/wiki/FEATURE-IDEA:-@SuperToString

Была ли эта страница полезной?
0 / 5 - 0 рейтинги