oop - Dart == 运算符和相同的函数不会为具有相同内容的 2 个对象产生 true
问题描述
所以我一直试图通过它们的字段来比较两个对象。
我注意到equals
飞镖中没有方法。但是有identical
函数和==
运算符。
我似乎无法理解为什么没有 equals 方法。如果我想这样做怎么办?
class Name {
String fname;
String lname;
String get firstName => this.fname;
void set firstName(String fname) => this.fname = fname;
String get lastName => this.lname;
void set lastName(String lname) => this.lname = lname;
Name({this.fname, this.lname});
@override
String toString() {
return this.firstName + " " + this.lastName;
}
bool equals(Name n2) {
return this.firstName == n2.firstName && this.lastName == n2.lastName
? true
: false;
}
}
void main(List<String> args) {
Name n1 = new Name();
n1.firstName = "James";
n1.lastName = "Bond";
Name n2 = new Name();
n2.firstName = "James";
n2.lastName = "Bond";
print(n1.equals(n2)); // true
print(identical(n1, n2)); // false
print(n1 == n2); // false
}
我能做什么,而不是让自己的平等。或者 dart 是否希望您手动执行此操作。
解决方案
identical
即使您要比较的两个对象的名字和姓氏相同,也不会返回 true。那是因为它们不是相同的实例。每个实例都有自己的身份和哈希码。
您可以覆盖 == 运算符和哈希码。然后,您将能够比较两个不同的实例。Equatable-Package 已经为您做到了,因此您可以使用 == 运算符来比较两个不同的实例:https ://pub.dev/packages/equatable