Vérification null avant d'appeler super () dans copy ctor, Java


J'ai un Polygone de classe de base qui implémente une Forme d'Interface , et un autre Triangle de classe qui étend le Polygone , maintenant dans le constructeur de copie de Triangle, je dois vérifier si l'autre triangle donné n'est pas un pointeur nul mais je ne peux pas le faire car je dois utiliser super() afin d'initialiser mon tableau

Voici mon code : Polygone - la classe abstraite :

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;
}

Triangle la sous-classe:

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());
}

Merci d'avance !

Author: Dror.I, 2014-05-02

1 answers

Utilisez une méthode d'aide statique:

public Triangle(Triangle other) {
    super(clonePoints(other));
}

private static Point[] clonePoints(Triangle other) {
     if (other == null) {
         // ...
     }

     return other.getPoints().clone();
}

De plus, ce que je fais souvent, c'est créer une méthode d'aide plus générique en tant que telle:

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;
}
 5
Author: Lukas Eder, 2014-05-01 21:59:57