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

Dart自定义栈如何打印最后元素?解决[]运算符未定义报错

解决CustomStack无法使用索引访问的问题

你遇到的错误是因为CustomStack类没有实现[]索引运算符,所以无法直接通过plates[plates.length-1]的方式访问元素。要打印栈顶的“Plate Extra”,有以下几种方案:

方案1:直接使用已有的top属性(推荐)

你的CustomStack已经定义了top getter,它直接返回栈顶元素(也就是列表的最后一个元素),完全符合你的需求,直接调用即可:

void main() {
  CustomStack<String> plates = CustomStack();
  plates.push("Plate1");
  plates.push("Plate2");
  plates.push("Plate3");
  plates.push("Plate Extra");
  print(plates);
  print(plates.top); // 直接输出Plate Extra
}

方案2:实现[]索引运算符

如果希望支持像普通列表一样用索引访问元素,可以在CustomStack类中添加operator []方法:

class CustomStack<T> {
  final _list = <T>[];
  void push(T value) => _list.add(value);
  T pop() => _list.removeLast();
  T get top => _list.last;
  bool get isEmpty => _list.isEmpty;
  bool get isNotEmpty => _list.isNotEmpty;
  int get length => _list.length;
  @override
  String toString() => _list.toString();

  // 添加索引运算符重载
  T operator [](int index) {
    // 可选:添加越界检查,避免运行时错误
    if (index < 0 || index >= _list.length) {
      throw RangeError.index(index, _list, "index", "索引超出范围");
    }
    return _list[index];
  }
}

修改后,原来的print(plates[plates.length-1])就能正常运行,输出“Plate Extra”。

方案3:添加自定义的元素获取方法

如果不想重载运算符,也可以添加一个专门的方法来获取指定索引的元素:

class CustomStack<T> {
  final _list = <T>[];
  void push(T value) => _list.add(value);
  T pop() => _list.removeLast();
  T get top => _list.last;
  bool get isEmpty => _list.isEmpty;
  bool get isNotEmpty => _list.isNotEmpty;
  int get length => _list.length;
  @override
  String toString() => _list.toString();

  // 自定义元素获取方法
  T getElementAt(int index) {
    if (index < 0 || index >= _list.length) {
      throw RangeError.index(index, _list, "index", "索引超出范围");
    }
    return _list[index];
  }
}

使用时调用print(plates.getElementAt(plates.length-1))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:35:30