给定无效参数时,构造函数应如何操作?

sti*_*k81 16 constructor

如果一个类有一个构造函数,它将一些值对象作为参数并依赖于它来进行初始化.如果此对象为null,它应该如何反应?

class SomeClass
{
    private SomeData _data; 
    public SomeClass(SomeValueObject obj)
    {
        _data = obj.Data;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子,但总的来说:如果构造函数被赋予无效参数,那么它应该如何操作,因此无法正确构造?它应该只是返回而不进行任何初始化?将参数设置为某些默认值?抛出异常?别的什么?

我相信这个问题的答案是"它取决于",但有没有最佳实践等?

Ell*_*iot 15

程序员应该能够假设成功创建了一个对象,除非引发异常.异常的类型取决于参数,但仍应取消选中.你想要的最后一件事是构造函数无法构建一个有效的对象,也没有告诉调用者它.

我认为在构造函数中使用默认值是一种危险的习惯.

  • 我支持这个.将对象置于某种未定义状态确实没有多大价值. (2认同)

Mih*_*ria 6

很大程度上取决于您的业务逻辑.如果您的业务逻辑需要SomeValueObject不为null,那么在SomeClass没有实例化的情况下SomeValueObject,构造函数肯定应该抛出异常IllegalArgumentException.