我有以下代码:
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...
}
我在想,构建这样一个对象是否安全可靠,因为我担心 Point 类型的三个变量可能会被外部修改(破坏封装性)。例如:
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);
}
这无疑会操作与Triangle变量中引用的同一“top”对象。因此,修复方法是在Triangle构造函数内执行以下操作:
public Triangle(Point left, Point right, Point top) {
this.left = new Point(left);
this.right = new Point(right);
this.top = new Point(top);
}
请记住,Point类中有一个复制构造函数,因此上述三个语句是有效的。