public int compareTo(Item item) {
            if (item == null) {
                // 1-rc < 1, 1-ga > 1
                return comparableQualifier(value).compareTo(RELEASE_VERSION_INDEX);
            }
            switch (item.getType()) {
                case INTEGER_ITEM:
                    return -1; // 1.any < 1.1 ?

                case STRING_ITEM:
                    return comparableQualifier(value).compareTo(comparableQualifier(((StringItem) item).value));

                case LIST_ITEM:
                    return -1; // 1.any < 1-1

                default:
                    throw new RuntimeException("invalid item: " + item.getClass());
            }
        }
Returns a comparable value for a qualifier.

This method takes into account the ordering of known qualifiers then unknown qualifiers with lexical
ordering.

just returning an Integer with the index here is faster, but requires a lot of if/then/else to check for -1
or QUALIFIERS.size and then resort to lexical ordering. Most comparisons are decided by the first character,
so this is still fast. If more characters are needed then it requires a lexical sort anyway.

@param qualifier
@return an equivalent value that can be used with lexical comparison
plugin/src/main/java/com/mcxiaoke/packer/ng/StringVersion.java