Dart语言中如何为Int类新增自定义运算符实现特定计算处理
Dart中为int类型添加自定义运算符的实现方法
Dart不支持直接修改内置int类的原生实现,你可以通过两种方式实现自定义运算符逻辑:
方式一:通过扩展(Extension)新增运算符
这是无侵入的实现方案,不需要修改原有int类代码,仅在扩展生效的作用域内可用。
实现示例
import 'dart:math'; // 定义int类型的扩展 extension IntCustomOperator on int { /// 自定义运算符 ^^:实现幂运算 num operator ^^(int exponent) { return pow(this, exponent); } /// 自定义运算符 +%:返回当前值加上自身的指定百分比 double operator +%(int percent) { return this * (1 + percent / 100); } }
调用方法
void main() { print(2 ^^ 4); // 输出 16 print(200 +% 15); // 输出 230.0 }
方式二:通过包装类重载原生运算符
如果你需要修改int原有运算符的默认行为(比如修改+的计算逻辑),扩展无法覆盖原生类的实现,需要自己封装包装类:
class CustomInt { final int value; CustomInt(this.value); // 重写+运算符:两数相加后再乘以2 CustomInt operator +(CustomInt other) { return CustomInt((value + other.value) * 2); } } // 调用示例 void main() { final a = CustomInt(3); final b = CustomInt(5); print((a + b).value); // 输出结果为 (3+5)*2 = 16 }
注意事项
- 可自定义的运算符有固定允许范围:支持
+、-、*、/、%、^、&、|、>>、<<等单/二元运算符,也可以自定义组合运算符(比如^^、+%),但不能和Dart保留语法冲突。 - 二元运算符只能传入1个参数,一元运算符不能传入参数,参数类型和返回类型可根据需求自定义。
- 扩展定义的运算符仅在导入了该扩展的代码文件中生效,不会影响全局int的行为,也不会和其他库的实现冲突。
内容的提问来源于stack exchange,提问作者Ahmed Alkayyal
相关产品推荐
相关产品推荐

