Это не является неизменным, потому что ...
Triangle t1 = new Triangle(new Point(0,0), new Point(0, 10), new Point(10, 10));
Triangle t2 = t1;
System.out.println( t1.getPoints()[0] ); // -> 0
t2.getPoints()[0].x = 10;
System.out.println( t1.getPoints()[0] ); // -> 10
Таким образом, класс не является неизменным, потому что вы можете изменить состояние экземпляра (внутренний Point[]
выставлен) и этотакже изменяет состояние ссылки на тот же экземпляр.
Чтобы сделать его истинным неизменяемым классом, вам потребуются методы для раздельного получения X и Y из каждой точки, например:
public int getPointX(int point) { return points[point].x; }
public int getPointY(int point) { return points[point].y; }
или
public Point getPoint(int point) { return new Point(points[point]); }
или верните копию points
, как вы предлагали при редактировании.