Вот что я бы сделал, чтобы сделать этот класс неизменным, с помощью Гуава . Из кода @Override
, который вы выложили, я вижу, что IShape
, по-видимому, требует Point[]
от метода getPoints()
, но я игнорирую это для примера, поскольку использование массивов объектов довольно плохая идея, особенно если вы хотите неизменности (поскольку они не могут быть неизменными и все).
public final class Triangle implements IShape, Serializable {
private final ImmutableList<Point> points;
public Triangle(Point a, Point b, Point c) {
this.points = ImmutableList.of(a, b, c);
}
public ImmutableList<Point> getPoints() {
return this.points;
}
// ...
}
Point
также должно быть больше похоже на:
public final class Point implements Serializable {
/*
* Could use public final here really, but I prefer
* consistent use of methods.
*/
private final int x;
private final int y;
private final int z;
public Point(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
// getters, etc.
}