如何将@EqualsAndHashCode与Include一起使用-Lombok

时间:2019-07-05 18:58:32

标签: java equals hashcode lombok

如何结合使用@EqualsAndHashCodeInclude Java版Lombok库。

@EqualsAndHashCode.Include( )

如何使Equals比较班级ID?

示例:

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

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

3 个答案:

答案 0 :(得分:3)

Lombok中,只需在必填字段中添加@EqualsAndHashCode.Include@EqualsAndHashCode.Exclude

  

任何类定义都可以使用@EqualsAndHashCode进行注释,以使lombok生成equals(Object other)和hashCode()方法的实现。默认情况下,它将使用所有非静态,非瞬态字段,,但是您可以通过使用@EqualsAndHashCode标记类型成员来修改使用哪些字段(甚至指定要使用各种方法的输出)。 .strong或.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;
 }

答案 1 :(得分:2)

您应该在字段上使用它,而不是在类本身上使用它。您可以通过检查定义以下目标(字段和方法,而不是类)的注释的定义来进行检查

@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;
}

答案 2 :(得分:1)

要在Includeequals方法中包括的成员上使用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;
}