6 Şubat 2019 Çarşamba

Lombok @Getter Anotasyonu

Giriş
Şu satırı dahil ederiz.
import lombok.Getter;
Ne İçin Kullanılır
Sınıfın en üstüne veya sınıf üye alanlarına yazılabilir. Sınıfa getter metodları ekler.

Sınıf  Seviyesinde Kullanırsak
Açıklaması şöyle.
You can also put a @Getter and/or @Setter annotation on a class. In that case, it's as if you annotate all the non-static fields in that class with the annotation.

Üretilen Getter Metod İsimleri Nasıldır?
Üretilen kod şöyle. Eğer alan primitive ise isX() şeklindedir. Eğer Object is getX() şeklindedir. Alan ismi "isX" şeklinde ise getter() da aynı isimledir. Açıklaması şöyle
For boolean fields that start with is immediately followed by a title-case letter, nothing is prefixed to generate the getter name.
Çıktı şöyle
@Getter
private boolean isGood; // => isGood()

@Getter
private boolean good; // => isGood()

@Getter
private Boolean isGood; // => getIsGood()
Örnek - Sınıf Seviyesinde
Şöyle yaparız. getEmpId(), getfirstName() gibi metodlar eklenir.
@Getter
@Setter
public class MyObject {

  public Long empID;
  public String firstName;
  public String lastName;
  ...
}
Örnek - - Üye Alan Seviyesinde
Eğer üye alanlara eklemek istersek şöyle yaparız.
public enum MyEnum {
  @Getter
  private int member1;
  @Getter
  private int member2;
}
Ancak şöyle daha kolay
@Getter
public enum MyEnum {
  private int member1;
  private int member2;
}
Örnek - Enum Kullanımı
İstenirse enum'a da eklenebilir. Bu durumda getVariable() metodu üretilir.
@Getter
public enum Test {
  TEST;

  private int variable;
}
lazy Alanı
Örnek
Şöyle yaparız
public class Employee {
  ...
  @Getter(lazy = true)
  private final BigDecimal salary = calculateSalary();
  
}
Açıklaması şöyle. Yani sadece employee.getSalary() çağrısı yapılınca calculateSalary() çalıştırılır
This annotation only provides a convenient way to calculate the salary only once and cache its value for future reference.
...
By calculating the salary only when it is first accessed, instead of in the constructor, the code becomes more flexible and efficient.
Üretilen kod şuna benzer
public class Employee {

  private final AtomicReference<BigDecimal> cachedSalary = new AtomicReference<>();

  public BigDecimal getSalary() {
    var cachedSalary = this.cachedSalary.get();
    if(cachedSalary != null) {
      return cachedSalary;
    }
    var salary = calculateSalary()
    this.cachedSalary.set(salary);
    return salary;
  }
}




Hiç yorum yok:

Yorum Gönder