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

Flutter自定义数值类操作符重载如何支持操作数顺序互换?

Dart中实现自定义类与num的双向乘法操作符重载

你遇到的问题本质是:你在MyClass中重载的operator *仅支持MyClass对象作为左操作数的场景,而2 * myObject里左操作数是num类型,Dart不允许直接修改内置num类的操作符,这时可以通过**扩展(Extension)**来实现反向的乘法支持。

解决方案代码

class MyClass {
  double value;

  MyClass(this.value);

  // 处理 MyClass * num 的情况
  MyClass operator *(dynamic other) {
    if (other is num) {
      return MyClass(this.value * other);
    }
    throw ArgumentError("Unsupported operation");
  }
}

// 给num类型扩展operator *,处理 num * MyClass 的情况
extension NumMyClassMultiplication on num {
  MyClass operator *(MyClass other) {
    return MyClass(this * other.value);
  }
}

void main() {
  MyClass myObject = MyClass(5.0);

  MyClass result1 = myObject * 2;
  MyClass result2 = 2 * myObject;

  print(result1.value); // 输出: 10.0
  print(result2.value); // 输出: 10.0
}

说明

  • 原MyClass中的operator *负责处理MyClass实例左乘num的场景;
  • 通过extension给num类型新增operator *方法,专门处理num左乘MyClass实例的场景,内部直接复用数值计算逻辑;
  • 这样两种方向的乘法写法都能正常执行,符合预期效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:53:16