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
相关产品推荐
相关产品推荐

