Bölüm 4 - Objects and Classes 8

Record'lar class'ların özel formlarıdır ve bunların durumu public olarak immutable ve readable'dır.

record Point(double x, double y){}

Bunun sonucu olarak instance field'lar şöyle olur tabi biz hiçbir şey yapmayız otomatik oluşturulurlar.

private final double x;
private final double y;

JLS (Java Language Specification)'da record'ların instance field'ları onun component'leri olarak adlandırılırlar.

ve bizim yukarıda oluşturduğumuz record otomatik olarak şöyle bir constructor'a sahiptir.

public Point(double x,double y){}

ve accessor methodları

public double x()
public double y()

Kullanmak istersek

var p = new Point(3,4);
System.out.println(p.x()+" "+p.y());

Bir record'a instance field tanımlayamayız! Ama static field,static method yada normal methodlara sahip olabilir.

record Point(double x, double y){
  private double r; // HATA!!!
  public static Point ORIGIN = new Point(0,0);
  public double distanceFromOrigin(){ // static de yapabiliriz.
    return Math.hypot(x,y);
  }
}

Dikkat edilmesi gereken hususlardan birisi de record'ların instance field'ları otomatik olarak final'dir.

Constructors : Canonical, Custom, and Compact

Otomatk olarak tanımlanmış bir constructor instance field'ları set ediyorsa bu constructor'a biz canonical constructor deriz.

record Point(double x, double y) {
    // Canonical constructor (otomatik)
    // public Point(double x, double y) { this.x = x; this.y = y; }
}

Ayrıca biz custom constructor'larda tanımlayabiliriz. Bu constructor'ların ilk statemen'i diğer bir constructoru çağırmak zorundadır. çünkü record'larda her constructor mutlaka canonical constructor’a gitmeli

record Point(double x,double y){
  public Point(){
    this(0,0);
  }
}
← Bloğa Dön