java - 在复制 ctor 中调用 super() 之前进行空检查,Java

标签 java nullpointerexception null copy-constructor

我有一个实现接口(interface) Shape 的基类 Polygon 和另一个扩展 Polygon 的类 Triangle ,现在在 Triangle 复制构造函数中我需要检查给定的另一个三角形是否不是空指针但我不能这样做因为我必须使用 super() 才能初始化我的点数组。

这是我的代码: 多边形 - 抽象类:

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

关于java - 在复制 ctor 中调用 super() 之前进行空检查,Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23417287/

相关文章:

java - 在 Java 7 中播放声音

java - 将字符串数组转换为int数组android

java - 如何将 TreeViewer 单元格的一部分设为粗体?

Python MySQL插入NULL(None)值报错

scala - Scala 中用户定义对象的类型

java - 为什么我可以在三元运算中将基本类型设置为 null

java - 如何检查文件是否处于锁定模式?

Android:this.getApplication() 返回 NULL 指针

java - 使用 testng 框架运行 selenium 测试时出现空异常错误

java - 为什么我的字符串数组有空值? (java)