在扩展类型中重新声明“==”运算符 - Dart

问题描述 投票:0回答:1

我无法在扩展类型中重新声明“==”运算符

extension type Compare(List<int> types) {
   @redeclare
    bool operator ==(List<int> other)  =>true;
}

我收到这些错误:

扩展类型不能声明与成员同名的成员 由“对象”声明。尝试为成员指定不同的名称

还有这个

该方法不会重新声明在超级接口中声明的方法。 尝试更新此成员以匹配超级接口中的声明, 或删除重新声明注释

有没有办法在扩展类型中重新声明它?

flutter dart overriding extension-methods redeclare
1个回答
0
投票

扩展不能声明与“Object”声明的成员同名的成员。

当扩展声明声明的成员与类 Object 中声明的成员同名时,分析器会生成此诊断信息。这样的成员永远不能被使用,因为 Object 中的成员总是最先找到的。

示例:

以下代码会生成此诊断信息,因为

toString
是由
Object
定义的:

extension E on String {
  String toString() => this;
}

由于无法在

Object
中覆盖
extension
类的成员,因此您应该为所需的功能使用其他名称。

extension ListComparison on List<int>{

  bool equals (List<int> other){
    if(length != other.length)
      return false;
    for(int i = 0 ; i < length; i++){

      if(this[i] != other[i])
        return false;
    }

    return true;
  }
  
  // you can't overload == operator in extensions, reserved by object

}

  print([1,2,3].equals([1,2,3])); // true
  print([1,2,3].equals([1,2,2])); // false

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.