从继承类获取字段遇报错:Game类未定义numberOfRounds getter
解决Dart中抽象基类子类字段访问报错问题
你遇到的报错是因为Dart编译器不会仅通过is判断就自动将父类类型提升为子类类型,必须显式告知编译器当前对象的具体子类类型,才能访问专属字段。以下是两种可行的解决方法:
方法一:显式类型转换(兼容所有Dart版本)
通过as关键字将父类对象转换为对应的子类类型,让编译器识别专属字段:
Game game; String title = game is MultiplayerGame ? "Rounds: ${(game as MultiplayerGame).numberOfRounds.toString()}" : game is SingleplayerGame ? "Level: ${(game as SingleplayerGame).level.toString()}" : "";
方法二:Dart 3+ 模式匹配(更简洁)
如果使用Dart 3及以上版本,推荐用switch表达式的类型模式,直接绑定子类对象,代码更易读:
Game game; String title = switch (game) { MultiplayerGame g => "Rounds: ${g.numberOfRounds.toString()}", SingleplayerGame g => "Level: ${g.level.toString()}", _ => "" };
注意:如果game有可能为null,需要在判断中额外处理null情况,比如在switch分支中添加null => ""。
内容的提问来源于stack exchange,提问作者NicklasF
相关产品推荐
相关产品推荐

