如何在Java中阻止构造函数抛出异常

时间:2017-01-04 16:18:28

标签: java exception

我有以下Trip类:

class Trip {
    final ArrayList<GpsPoint> gpsPoints;
    final String name;

    Trip(String name, ArrayList<GpsPoint> gpsPoints) throws SpecialException {
        if (gpsPoints.size() < 5) {
            throw SpecialException("not enough GPS points");
        }

        this.name = name;
        this.gpsPoints = gpsPoints;
    }
}

现在我想返回一个 new trip对象,如下所示:

// method inside trip class
Trip makeTripWithNewName(String newName) {
    return new Trip(newName, this.gpsPoints);
}

但是这个方法必须抛出SpecialException,即使我绝对肯定不会发生异常(因为当Trip对象已经被构造并且我们只需要重命名它时,它将至少有5个点)。

如何避免输入

Trip makeTripWithNewName(String newName) throws SpecialException {
    ...
}

2 个答案:

答案 0 :(得分:1)

rename听起来像一个mutator方法。因此,传统上您希望对对象本身进行更改,而不是返回新对象。那么,rename就像这样:

public void rename(String name) {
    this.name = name;
}

确保name不是final

但是,如果您打算返回仅更改名称的对象副本,则代码看起来不错。如果您不想处理异常,可以考虑通过将SpecialException作为RuntimeException的子类来使{{1}}成为未经检查的异常。

答案 1 :(得分:-1)

Trip makeTripWithNewName(String newName) {
    try {
        return new Trip(newName, this.gpsPoints);
    } catch (SpecialException exception) {
        // This code path will never be reached
        throw new RuntimeException(exception);
    }
}