How does a set determine that two objects are equal in dart?

后端 未结 1 1899
半阙折子戏
半阙折子戏 2020-12-16 16:17

I don\'t understand how a set determines when two objects are equal. More specific, when does the add method of a set, really adds a new object, and when doesn\

相关标签:
1条回答
  • 2020-12-16 16:58

    For a comprehensive write-up about operator== in Dart see http://work.j832.com/2014/05/equality-and-dart.html

    It just checks if they are equal a == b You can override the == operator to customize this behavior. Keep in mind that also hashCode should be overridden when the == operator is overridden.

    class Action {
      @override
      bool operator==(other) {
        // Dart ensures that operator== isn't called with null
        // if(other == null) {
        //   return false;
        // }
        if(other is! Action) {
          return false;
        }
        return description == (other as Action).description;
      }
    
      // hashCode must never change otherwise the value can't
      // be found anymore for example when used as key 
      // in hashMaps therefore we cache it after first creation.
      // If you want to combine more values in hashCode creation
      // see http://stackoverflow.com/a/26648915/217408
      // This is just one attempt, depending on your requirements
      // different handling might be more appropriate.
      // As far as I am aware there is no correct answer for
      // objects where the members taking part of hashCode and
      // equality calculation are mutable.
      // See also http://stackoverflow.com/a/27609/217408
      int _hashCode;
      @override
      int get hashCode {
        if(_hashCode == null) {
          _hashCode = description.hashCode
        }
        return _hashCode;
      }
      // when the key (description) is immutable and the only
      // member of the key you can just use
      // int get hashCode => description.hashCode
    }
    

    try at DartPad

    0 讨论(0)
提交回复
热议问题