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

时间:2013-12-28 13:00:01

标签: dart

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

我正在设置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的生成?

1 个答案:

答案 0 :(得分:6)

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

或者你可以做风格指南认为不可取的,用没有setter的getter包装私有字段:

abstract class Game {
  var _director;
  get director => _director;
}