如何在不使用final的情况下禁用setter生成?

Ras*_*sen 3 dart

为了好玩和学习,我正在用Dart构建一个简单的游戏引擎.我已经定义了一个抽象Game类.A Game具有Director director管理场景转换的字段.这个类也是抽象的.每一个具体的游戏必须实现自己的具体GameDirector类,说MyGameMyDirector.

我正在设置这样Game的导演:

abstract class Game {
  Director director;

  Game() {
    director = createDirector();
  }

  Director createDirector();
}
Run Code Online (Sandbox Code Playgroud)

MyGame(继承自Game)实现createDirector().

使用此方法,Dart会为该director字段生成一个setter,以便Game实例的用户可以像这样更改它game.director = something;.我不希望那是可能的.解决这个问题的常用方法是创建director字段final,但由于在Game构造函数(而不是初始化列表)中分配/创建它的方式,我不能这样做.

director在这种情况下如何禁用setter 的生成?

moc*_*ace 6

使它成为final推荐的,但实际上你无法在构造函数中分配它.

或者,您可以执行样式指南认为不可取的操作,使用没有setter的getter包装私有字段:

abstract class Game {
  var _director;
  get director => _director;
}
Run Code Online (Sandbox Code Playgroud)