You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从继承类获取字段遇报错: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 11:46:01