首页 > 解决方案 > 飞镖/颤振扩展中的运算符重载

问题描述

我希望能够用简单的运算符比较 dart 中的两个 DateTime,因此我创建了一个名为“date_comparison.dart”的文件,其中包含以下代码:

extension DateComparison on DateTime {
  bool operator >(other) => compareTo(other) > 0;
  bool operator <(other) => compareTo(other) < 0;
  bool operator >=(other) => compareTo(other) >= 0;
  bool operator <=(other) => compareTo(other) <= 0;
}

在另一个文件中,我导入了这个文件并使用了比较运算符,VS Code 没有给我任何错误。(该文件的代码有点太多,无法在此处发布,但关键是除此之外一切正常)

但是,当我尝试运行该应用程序时,我收到一个运行时错误NoSuchMethodError,提示 »Class 'DateTime' 没有实例方法 '<='。«

标签: flutterdartoverloadingoperator-keyword

解决方案


所以我解决了这个问题:

事实证明,只要扩展修改其类型的变量是动态类型,即使为该变量分配了正确的值,扩展也会被忽略。

就我而言,我不小心忘记在我想使用运算符扩展的变量上声明 DateTime 类型,因此它是动态的并且扩展没有效果。


推荐阅读