У меня есть базовый класс Polygon, который реализует интерфейсную форму, и еще один класс Triangle, который расширяет Polygon, теперь в конструкторе копии Triangle мне нужно проверить, не указан ли другой треугольник не как нулевой указатель, но я не могу этого сделать, потому что мне нужно использовать super(), чтобы инициализировать мой массив точек.
здесь мой код: Polygon - абстрактный класс:
public abstract class Polygon implements Shape {
private Point[] points;
/**
* Build a Polygon that hold a set of Points.
*
* @param points
* (Point[])
*/
public Polygon(Point[] points) {
this.points = points;
}
Треугольник подкласса:
public class Triangle extends Polygon {
/**
* Constructor.
* Build a Triangle from 3 Point's.
* @param p1
* @param p2
* @param p3
*/
public Triangle(Point p1, Point p2, Point p3) {
super(new Point[] { p1, p2, p3 });
}
/**
* Copy constructor.
* @param other
*/
public Triangle(Triangle other) {
/*
* *********************************************
*
* Here is where i want to make the null check .
*
* *********************************************
*/
super(other.getPoints().clone());
}
Спасибо, вперед!
Используйте статический вспомогательный метод:
public Triangle(Triangle other) {
super(clonePoints(other));
}
private static Point[] clonePoints(Triangle other) {
if (other == null) {
// ...
}
return other.getPoints().clone();
}
Кроме того, то, что я часто делаю, это создать более общий вспомогательный метод как таковой:
public Triangle(Triangle other) {
super(neverNull(other).getPoints().clone());
}
private static <S extends Shape> S neverNull(S notNull) {
if (notNull == null) {
// throw a meaningful exception
// or return a default value for S if possible / reasonable
}
return notNull;
}
Preconditions.checkNotNull()
который делает это, и что JDK, начиная с версии 7, имеет Objects.requireNonNull()
.
Objects