首页 > 解决方案 > 我应该在构造函数中抛出异常吗

问题描述

如果我有一个三角形类,像这样:

export default class Triangle {

    sides: number[]

    constructor(...sides: number[]) {
        this.sides = sides
    }

    kind() {
        // returns type of triangle
    {
}

如果传入构造函数的边没有创建一个真正的三角形,那么在创建类时(例如在构造函数中)还是在调用函数时抛出错误更好?

这个答案,说它在 Java 中没问题,我确信它在 TypeScript 中有效。我只是想知道在一般的 OOP 和具体的 TypeScript 方面是否有“最佳实践”。

标签: typescriptoop

解决方案


在构造函数中抛出是完全可以接受的。通常最好的做法是快速失败并尽早失败。例如,在您的情况下,最好在构造函数中抛出,以便可以及早将错误暴露给负责发送错误数据的代码。如果您在实际使用三角形方法时稍后抛出,则将被该异常中断的代码没有错(他们无法采取不同的措施来防止异常)。这通常意味着您必须找到创建对象的位置,才能解决错误。

首先,构造函数的主要职责之一是确保对象只能在有效状态下创建。因此,如果参数会导致对象处于无效状态,则抛出不仅是可以接受的,而且这也符合构造函数首先存在的原因。


推荐阅读