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

Dart中是否可以定义接收索引参数的getter?

Dart getter 支持索引参数的问题解答

核心结论

  • Dart 语法层面不支持 getter 接收任何参数,包括你需要的索引参数,无法直接通过定义 getter 实现带索引的取值需求。

Dart 中 getter 的标准语法如下,本身没有预留参数定义的位置:
返回值类型 get getter名 => 具体返回值;

符合需求的替代实现

方案1:重载[]下标运算符(最推荐)

如果你想要实现和「带索引的getter」完全一致的使用体验(不需要写方法调用括号、直接通过实例[索引]的形式取值),可以重载类的[]运算符,示例代码如下:

class SampleContainer {
  final List<int> _data = [10, 20, 30, 40, 50];

  // 重载下标取值逻辑,接收索引参数
  int operator [](int index) {
    // 可以在这里加自定义的边界校验、转换逻辑等
    if (index < 0 || index >= _data.length) throw ArgumentError('索引超出范围');
    return _data[index];
  }

  // 可选:如果需要支持索引赋值,额外重载[]=运算符
  void operator []=(int index, int value) {
    if (index < 0 || index >= _data.length) throw ArgumentError('索引超出范围');
    _data[index] = value;
  }
}

void main() {
  final container = SampleContainer();
  print(container[2]); // 直接通过索引取值,输出30,和普通getter使用体验一致
  container[2] = 100;
  print(container[2]); // 输出100
}

方案2:getter返回支持下标访问的对象

如果你必须要用到getter,可以让getter返回一个本身支持下标访问的对象(比如List、Map),间接实现带索引取值的效果,示例如下:

class SampleClass {
  final Map<String, String> _userInfo = {'name': '张三', 'age': '25'};

  // getter返回Map对象,本身支持索引
  Map<String, String> get userInfo => _userInfo;
}

void main() {
  final sample = SampleClass();
  print(sample.userInfo['name']); // 先调用getter,再通过索引取值,输出张三
}

补充说明

getter 的设计初衷是提供无参数的属性访问入口,如果你需要的逻辑本身需要传入参数,优先使用普通方法或者运算符重载即可,不需要强行使用getter实现。

内容的提问来源于stack exchange,提问作者behzad besharati

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:39:02