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

如何在泛型Stack类中判断栈为空并优化pop方法

Dart泛型Stack类的pop方法空栈处理方案

原代码的问题在于pop方法声明返回类型为T,但当栈为空时返回null,若T为非可空类型(如int、String),会触发类型错误。以下是几种可行的修复方案:

方案一:返回可空类型T?

让pop方法返回可空类型,空栈时打印提示并返回null,调用方需处理null情况:

class Stack<T> {
  final List<T> _items = [];

  void push(T item) => _items.add(item);

  T? pop() {
    if (_items.isEmpty) {
      print('栈为空,无法执行pop操作');
      return null;
    }
    return _items.removeLast();
  }

  void display() => _items.forEach(print);
}

方案二:抛出异常

空栈时抛出异常,符合栈操作的常规设计,调用方通过捕获异常处理空栈场景:

class Stack<T> {
  final List<T> _items = [];

  void push(T item) => _items.add(item);

  T pop() {
    if (_items.isEmpty) {
      throw StateError('栈为空,无法执行pop操作');
    }
    return _items.removeLast();
  }

  void display() => _items.forEach(print);
}

方案三:返回包含操作结果的对象

自定义结果类,封装操作状态、返回值和提示信息,适合需要详细反馈的场景:

class StackResult<T> {
  final bool success;
  final T? value;
  final String message;

  StackResult(this.success, this.value, this.message);
}

class Stack<T> {
  final List<T> _items = [];

  void push(T item) => _items.add(item);

  StackResult<T> pop() {
    if (_items.isEmpty) {
      return StackResult(false, null, '栈为空,无法执行pop操作');
    }
    return StackResult(true, _items.removeLast(), '');
  }

  void display() => _items.forEach(print);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 19:00:16