在此 Flutter Redux 示例中,哈希码必须做什么

What does the hash code have to do in this Flutter Redux example

我在看this example

@immutable
class UserState {
  final bool isLoading;
  final LoginResponse user;

  UserState({
    @required this.isLoading,
    @required this.user,
  });

  factory UserState.initial() {
    return new UserState(isLoading: false, user: null);
  }

  UserState copyWith({bool isLoading, LoginResponse user}) {
    return new UserState(
        isLoading: isLoading ?? this.isLoading, user: user ?? this.user);
  }

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
          other is UserState &&
              runtimeType == other.runtimeType &&
              isLoading == other.isLoading &&
              user == other.user;

  @override
  int get hashCode => isLoading.hashCode ^ user.hashCode;
}

hashCode 与此有什么关系?这有什么用途? (我已经缩短了代码,因为我在发布大部分代码时遇到了 Whosebug 错误)

谢谢

您在这里看到的是 class 覆盖 == 运算符。

当您覆盖 == 运算符时,应该始终覆盖 hashCode。 任何对象的 hashCode 在使用像 HashMap 这样的散列 class 时使用,或者在将列表转换为集合时使用,这也是散列。

更多信息:

  1. https://medium.com/@ayushpguptaapg/demystifying-and-hashcode-in-dart-2f328d1ab1bc
  2. https://www.geeksforgeeks.org/override-equalsobject-hashcode-method/ 用 Java 作为编程语言进行解释,但应该适用于飞镖。