code: public int compareTo(ReadablePartial other) {
          if (this == other) {
              return 0;
          }
          if (size() != other.size()) {
              throw new ClassCastException("ReadablePartial objects must have matching field types");
          }
          for (int i = 0, isize = size(); i < isize; i++) {
              if (getFieldType(i) != other.getFieldType(i)) {
                  throw new ClassCastException("ReadablePartial objects must have matching field types");
              }
          }
          // fields are ordered largest first
          for (int i = 0, isize = size(); i < isize; i++) {
              if (getValue(i) > other.getValue(i)) {
                  return 1;
              }
              if (getValue(i) < other.getValue(i)) {
                  return -1;
              }
          }
          return 0;
      }
docs: Compares this partial with another returning an integer
  indicating the order.
  <p>
  The fields are compared in order, from largest to smallest.
  The first field that is non-equal is used to determine the result.
  <p>
  The specified object must be a partial instance whose field types
  match those of this partial.
  <p>
  NOTE: Prior to v2.0, the {@code Comparable} interface was only implemented
  in this class and not in the {@code ReadablePartial} interface.
  
  @param other  an object to check against
  @return negative if this is less, zero if equal, positive if greater
  @throws ClassCastException if the partial is the wrong class
  or if it has field types that don't match
  @throws NullPointerException if the partial is null
  @since 1.1