ich den folgenden Code habe:Ist es in Ordnung und sicher mit Verweisen auf Konstruktor übergeben zu arbeiten - Java
public class Triangle {
private Point left;
private Point right;
private Point top;
public Triangle(Point left, Point right, Point top) {
this.left = left;
this.right = right;
this.top = top;
}
// more program logic...
}
ich mich gefragt, ob es in Ordnung, und sicher ist, ein Objekt so zu konstruieren, weil ich fürchte, dass einige der drei Variablen vom Typ Point von außen modifiziert werden können (Break Encapsulation). Zum Beispiel:
public static void main(String[] args) {
Point left = new Point(0.0, 1.0);
Point right = new Point(2.4, 3.2);
Point top = new Point(5.8, 2.0);
Triangle t = new Triangle(left, right, top);
top.setX(10.2);
top.setY(23.4);
}
Dies wird zweifellos das gleiche „top“ Objekt bearbeitet, die im Dreieck Variable referenziert ist wird. So ist das Update die folgenden innerhalb des Dreiecks-Konstruktor tun:
public Triangle(Point left, Point right, Point top) {
this.left = new Point(left);
this.right = new Point(right);
this.top = new Point(top);
}
(bedenken Sie, dass ich eine Kopie Konstruktor in der Klasse Point haben, so dass die drei Aussagen über gültig sind)
Point implementiert nicht Cloneable, aber ich habe einen Kopierkonstruktor erstellt, der einen Point akzeptiert und im Grunde einen Point basierend auf dem anderen Konstrukt erstellt, ähnlich wie Ihre zweiten Vorschläge. –