为了娱乐和学习,我正在用Dart构建一个简单的游戏引擎。我已经定义了一个抽象的Game
类。 Game
有一个Director director
字段来管理场景转换。这个类也是抽象的。每个具体游戏都必须实现自己的具体Game
和Director
类,比如MyGame
和MyDirector
。
我正在设置Game
的导演:
abstract class Game {
Director director;
Game() {
director = createDirector();
}
Director createDirector();
}
MyGame
(继承自Game
)实施createDirector()
。
使用此方法Dart会为director
字段生成一个setter,因此Game
个实例的用户可以像game.director = something;
一样更改它。我不希望那是可能的。解决此问题的常用方法是创建director
字段final
,但由于在Game
构造函数(而不是初始化列表)中分配/创建的方式,我无法执行此操作。
如何在这种情况下禁用director
setter的生成?
答案 0 :(得分:6)
使它final
是推荐的,但实际上你无法在构造函数中分配它。
或者你可以做风格指南认为不可取的,用没有setter的getter包装私有字段:
abstract class Game {
var _director;
get director => _director;
}