在 这个 Flutter官方的例子有一个类,它没有扩展另一个类。那么为什么 int get hashCode
有 @override
凌驾于它之上?即没有什么可以覆盖的,不是吗?
class Item {
final int id;
final String name;
final Color color;
final int price = 42;
Item(this.id, this.name)
// To make the sample app look nicer, each item is given one of the
// Material Design primary colors.
: color = Colors.primaries[id % Colors.primaries.length];
@override
int get hashCode => id;
@override
bool operator ==(Object other) => other is Item && other.id == id;
}
来自官方 文件
哈希码是一个单一的整数,它表示对象的状态,影响运算符==比较。所有对象都有哈希码。默认的哈希码只代表对象的身份,就像默认的运算符==实现只有在对象相同的情况下才认为对象相等一样(参见 identityHashCode)。
换句话说,每当你创建一个Item类的对象时,你也会为它生成一个hashCode属性。
因此,现在如果你想检查两个 item 类对象的平等性,Dart(像 Java)将通过以下操作来检查其平等性。==
的哈希码。
这意味着 Item object1 != Item Object2
因为每个对象都有自己独特的哈希码。
因此,哈希码必须被覆盖,在这种情况下,所以 Item object1
可以检查是否与 Item object2