11 Temmuz 2018 Çarşamba

Lombok @EqualsAndHashCode Anotasyonu

Giriş
Normalde @Data anotasyonu bizim için equals() ve hashCode() metodlarını üretir. Ancak @Data tüm alanlar için üretir. Eğer daha kontrollü bir şey yapmak istiyorsak, @EqualsAndHashCode kullanılır.

callSuper Alanı - Kalıtım Varsa
Örnek
Eğer "Generating equals/hashCode implementation but without a call to superclass ..." şeklinde uyarı alıyorsak, ve ata sınıfın equals(), hashCode() metodlarını kullanmak istemiyorsak callSuper = false yaparız. Şöyle yaparız.
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public abstract class ContentModel implements Serializable {
  
  private int pointId;
  
  private LocalDate saveDate;
}
onlyExplicitlyIncluded  Alanı
Örnek - Sadece Belirtilen Alanlar İçin
Şöyle yaparız
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
public class User {
 
  @EqualsAndHashCode.Include
  private Long identity;
}

of Alanı

Hangi alanın kullanılacağını belirtir. Bu tür string alan şeyleri kullanmamak lazım. Onun yerine @EqualsAndHashCode(onlyExplicitlyIncluded = true) tercih edilmeli
 
Örnek
Şöyle yaparız.
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false, of = "naturalKey")
@Builder
public class Person implements IEntityModel<PersonNaturalKey> {

  private Long id;

  private PersonNaturalKey naturalKey = new PersonNaturalKey();

  private String age;
}

Hiç yorum yok:

Yorum Gönder