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