如何在泛型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
相关产品推荐
相关产品推荐

