class SnowflakeUID extends UID {

    @Override
    public int compareTo(final UID uid) {
        int result;
        if (uid instanceof SnowflakeUID) {
            final SnowflakeUID o = (SnowflakeUID) uid;
            final CompareToBuilder compare = new CompareToBuilder();
            if (null == this.snowflake) {
                compare.append(TOO_BIG_BIGINT, o.snowflake);
            } else if (null == o.snowflake) {
                compare.append(this.snowflake, TOO_BIG_BIGINT);
            } else {
                compare.append(this.snowflake, o.snowflake);
            }
            compare.append(this.extra, o.extra);
            result = compare.toComparison();
        } else if (null != uid) {
            result = toString().compareTo(uid.toString());
        } else {
            result = -1;
        }
        
        return result;
    }

    protected  SnowflakeUID();
    protected  SnowflakeUID(final BigInteger rawId, int radix, final String... extras);
    protected  SnowflakeUID(final SnowflakeUID template, final String... extras);

}