【问题标题】:How to use @EqualsAndHashCode With Include - Lombok如何使用 @EqualsAndHashCode 和 Include - Lombok
【发布时间】:2019-11-16 09:12:09
【问题描述】:

如何使用@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;
}

【问题讨论】:

  • 你的意思是只比较Id
  • 是的!仅比较 ID。

标签: java equals hashcode lombok


【解决方案1】:

你应该在现场使用它,它不是用于类本身的东西。您可以通过检查定义以下目标(字段和方法,而不是类)的注释的定义来检查这一点

@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】:

    Include 注释用于您要包含在equalshashCode 方法中的成员。如果您想准确指定应该使用哪些成员(而不是所有非静态非瞬态成员的默认值),您可以在 @EqualsAndHashCode 注释中使用 onlyExplicitlyIncluded = true 选项:

    @EqualsAndHashCode(onlyExplicitlyIncluded = true)
    @Table(name = "USER")
    public class User
    {
    
      @Id
      @GeneratedValue(strategy = GenerationType.IDENTITY)
      @Column(name = "IDENTITY_USER")
      @EqualsAndHashCode.Include
      private Long identity;
    }
    

    【讨论】:

      【解决方案3】:

      来自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;
       }
      

      【讨论】:

      • @EqualsAndHashCode.Include 仅在存在@EqualsAndHashCode(onlyExplicitlyIncluded = true) 时有效。 (在 lombok 版本 1.18.12 上测试)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-01-21
      • 2019-09-26
      • 2021-09-19
      • 2018-01-03
      相关资源
      最近更新 更多