code: public int compareTo(AbstractConcept other) {
          // Need to sort by concrete subclass first, and then by object hashCode
          final int meta = getClass().hashCode() - other.getClass().hashCode();
          final int quickCompare = hashCode() - other.hashCode();
  
          int result = 0 == meta ? (0 == quickCompare ? compareToWhenHashCodesEqual(other)
                  : quickCompare)
                  : meta;
  
          // If compare result is 0, then the objects must be equal()
          assert 0 != result || this.equals(other);
  
          return result;
      }
docs: Default {@link Comparable#compareTo(Object)} implementation that calls
  {@link #compareToWhenHashCodesEqual(AbstractConcept)} if and only if the
  {@link #hashCode()} values of {@code this} and {@code other} are equal.
  
  @return a negative integer, zero, or a positive integer as this object is
  less than, equal to, or greater than the specified object.