Как использовать @EqualsAndHashCode с Include - Lombok - PullRequest
3 голосов
/ 05 июля 2019

Как использовать @EqualsAndHashCode С Include, библиотекой Lombok для Java.

@EqualsAndHashCode.Include( )

Как сделать, чтобы Equals сравнивал идентификатор класса?

Пример:

@EqualsAndHashCode.Include( )
@Table(name = "USER")
public class User
{

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "IDENTITY_USER")
  private Long identity;
}

Ответы [ 3 ]

3 голосов
/ 05 июля 2019

С Lombok , просто добавьте @EqualsAndHashCode.Include или @EqualsAndHashCode.Exclude в обязательные поля

Любое определение класса может быть аннотировано с помощью @EqualsAndHashCode, чтобы позволить lombok генерировать реализацииметоды equals (Object other) и hashCode ().По умолчанию он будет использовать все нестатические, непереходные поля, , но вы можете изменить, какие поля используются (и даже указать, что должны использоваться выходные данные различных методов), пометив члены типа @EqualsAndHashCode.Include или @ EqualsAndHashCode.Exclude. Кроме того, вы можете указать, какие именно поля или методы вы хотите использовать, пометив их @ EqualsAndHashCode.Include и используя @EqualsAndHashCode (onlyExplicitlyIncluded = true).

@EqualsAndHashCode
@Table(name = "USER")
public class User
  {

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "IDENTITY_USER")
  @EqualsAndHashCode.Include
  private Long identity;
 }
2 голосов
/ 05 июля 2019

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

@Target({ElementType.FIELD, ElementType.METHOD})

Вот пример того, как его использовать

@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Table(name = "USER")
public class User
{

  @Id
  @EqualsAndHashCode.Include()
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "IDENTITY_USER")
  private Long identity;
}
1 голос
/ 05 июля 2019

Аннотация Include используется для элементов, которые вы хотите включить в методы equals и hashCode. Если вы хотите точно указать, какие элементы следует использовать (вместо значения по умолчанию для всех нестатических непереходных элементов), вы можете использовать опцию onlyExplicitlyIncluded = true в аннотации @EqualsAndHashCode:

@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@Table(name = "USER")
public class User
{

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "IDENTITY_USER")
  @EqualsAndHashCode.Include
  private Long identity;
}
...