Как Lombok с равным hashcode и toString с двумя объектами, которые имеют цикл? - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть два класса

@Data
class Org {
  int id;
  Account orgAccount;
  ...
}
@Data
class Account {
  Org org;
}

И у меня есть следующие объекты

var org = new Org();
org.setId(123);
var account = new Account();
org.setOrgAccount(account);
account.setOrg(org);

Если я сделаю account.hashCode() или account.toString(), я получу переполнение стека, потому что цикла. Чтобы обойти это, я делаю

@Data
class Account {
  @EqualsHashCode.Exclude
  @ToString.Exclude
  Org org;
}

Но на самом деле я все еще хочу, чтобы сравнивали org, но только для id, а не для всего объекта. Каков наилучший способ сделать это, не используя собственный хеш-код equals / hashcode?

1 Ответ

1 голос
/ 08 апреля 2020

Мое решение состоит в том, чтобы включить метод, который может быть private, который получит значение, которое я хочу сравнить, и включить его для ToString и EqualsHashCode

@Data
class Account {
  @EqualsHashCode.Exclude
  @ToString.Exclude
  Org org;

  @EqualsHashCode.Include
  @ToString.Include
  private int getOrgId() { return org.getId(); }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...