Oop 在使用私有成员之前,类是否应该验证它们是否存在?
总是在方法使用类的私有成员之前验证它们是否存在是一个好主意 考虑这个例子:Oop 在使用私有成员之前,类是否应该验证它们是否存在?,oop,constructor,language-agnostic,Oop,Constructor,Language Agnostic,总是在方法使用类的私有成员之前验证它们是否存在是一个好主意 考虑这个例子: class Game() { constructor() { this._setupCamera(); this._updateCameraPosition(); } _setupCamera() { this._camera = new Camera(); } _updateCameraPosition() { this._camera.position.x =
class Game() {
constructor() {
this._setupCamera();
this._updateCameraPosition();
}
_setupCamera() {
this._camera = new Camera();
}
_updateCameraPosition() {
this._camera.position.x = 500;
}
}
如果重新排列构造函数中调用的顺序,则类将中断,因为尚未定义摄影机
这个例子看起来很傻,但我经常在大班遇到这个问题。构造函数中的初始化顺序变得很重要,但是,如果不检查私有成员,则没有任何内容强制执行调用顺序
我可以这样避免问题:
_updateCameraPosition() {
if (!this._camera) {
throw new Error('Camera is not defined!');
}
this._camera.position.x = 500;
}
在使用私有成员之前总是检查它是否已定义是一个好主意吗?根据经验,在
构造函数运行完成之前,您不能对对象的状态(对象的(私有)字段)做出任何断言;至少在Java中,这样的行为是没有定义的
因此,回答您的问题,最佳实践可能是在构造函数中初始化成员,然后在后期构造方法中修改。在复杂类中,您可能希望使用Factory设计模式
或者绝对要确保按照正确的顺序编写构造函数的实现:)“在使用私有成员之前总是检查是否定义了它是个好主意吗?”
对。此外,将成员变量作为属性公开并使用是一种常见做法
如果从未调用setter,那么如果发现私有成员变量为null,就会在getter中动态创建一个小部件
private _myWidget;
private property MyWidget
{
get
{
if (_myWidget == null)
_myWidget = new Widget();
return _myWidget;
}
set
{
_myWidget = value;
}
}