public
Alanları kullanma
public
Bir sınıfın iç davranışını gerçekten sarmak istediğinizde alanları kullanmayın . java.io.BufferedReader
Örneğin ele alalım. Aşağıdaki alana sahiptir:
private boolean skipLF = false; // If the next character is a line feed, skip it
skipLF
tüm okuma yöntemlerinde okunur ve yazılır. Ayrı bir iş parçacığında çalışan bir dış sınıf skipLF
, okumanın ortasında durumunu kötü bir şekilde değiştirirse ne olur ? BufferedReader
kesinlikle haywire gidecek.
public
Alanları kullanma
Örneğin bu Point
sınıfı ele alalım:
class Point {
private double x;
private double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public double getX() {
return this.x;
}
public double getY() {
return this.y;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
}
Bu, iki nokta arasındaki mesafenin hesaplanmasını çok acı verici hale getirecektir.
Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.getX() - a.getX(), 2) + Math.pow(b.getY() - a.getY(), 2));
Sınıfın düz alıcılar ve ayarlayıcılar dışında herhangi bir davranışı yoktur. Sınıf yalnızca bir veri yapısını temsil ettiğinde ve hiç davranmadığında ve hiçbir zaman davranışa sahip olmadığında ortak alanları kullanmak kabul edilebilir (ince alıcılar ve ayarlayıcılar burada davranış olarak kabul edilmez ). Bu şekilde daha iyi yazılabilir:
class Point {
public double x;
public double y;
public Point(double x, double y) {
this.x = x;
this.y = y;
}
}
Point a = new Point(5.0, 4.0);
Point b = new Point(4.0, 9.0);
double distance = Math.sqrt(Math.pow(b.x - a.x, 2) + Math.pow(b.y - a.y, 2));
Temiz!
Ancak unutmayın: Sadece sınıfınız davranışlardan yoksun olmakla kalmamalı, aynı zamanda gelecekte de davranmak için hiçbir nedene sahip olmamalıdır .
(Bu cevap tam olarak budur . "Java Programlama Dili için Kod Kuralları: 10. Programlama Uygulamaları" nı belirtmek için :
Uygun halka açık değişkenlerin bir örneği, sınıfın temelde davranışsız bir veri yapısı olduğu durumdur. Başka bir deyişle, struct
sınıf yerine bir tane kullanırsanız (Java destekli ise)struct
) kullanırsanız, sınıfın örnek değişkenlerini herkese açık hale getirmek uygun olur.
Dolayısıyla resmi belgeler de bu uygulamayı kabul etmektedir.)
Ayrıca, yukarıdaki Point
sınıftaki üyelerin değişmez olması gerektiğinden eminseniz, final
bunu uygulamak için anahtar kelime ekleyebilirsiniz :
public final double x;
public final double y;