簡體   English   中英

如何使用等於哈希碼和 toString 的兩個具有循環的對象來龍目島?

[英]How to Lombok with equals hashcode and toString with two objects that have a cycle?

我有兩節課

@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而不是整個 object。 在不實現自己的 equals/hashcode 的情況下,最好的方法是什么?

我的解決方案是包含一個可以private的方法,該方法將獲取我想要比較的值並將其包含在 ToString 和 EqualsHashCode

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

  @EqualsHashCode.Include
  @ToString.Include
  private int getOrgId() { return org.getId(); }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM