繁体   English   中英

Dart/Flutter:如何在不使用 Equatable 的情况下比较 2 个对象是否等效

[英]Dart/Flutter : How to compare if 2 objects are equivalent without using Equatable

我想测试 2 个对象(同一类的 2 个不同实例)是否具有所有相同的属性值;
(即。看看它们是否在逻辑上等价)。

我不想只检查它们是否是完全相同的对象(像这样)。

而且我不想使用Equatable 包,只是因为我不想将我的属性标记为final

我想要的本质上是对 2 个对象的所有属性进行简单的深入比较。

我相信您需要覆盖类中的两个方法来执行自定义比较。

  1. ==运算符
  2. hashCode

例如:

class MyObj {
  String name;
  
  MyObj(this.name);
  
  @override
  bool operator ==(Object o) {
    if (o is MyObj && o.runtimeType == runtimeType) {
      if (o.name == name) {
        return true;
      }
    }
    return false;
  }
  
  @override
  int get hashCode => name.hashCode;
}

测试这个:

void main() {
  MyObj objA = MyObj('billy');
  MyObj objB = MyObj('bob');
  MyObj objC = MyObj('billy');
  
  print('object A == object B? ${objA == objB}');
  print('object A == object C? ${objA == objC}');
 
}

应该产生:

object A == object B? false
object A == object C? true

要覆盖多个属性的hashCode ,请查看此讨论

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM