Não entendi muito bem essa parte:
public abstract int compare(Cliente one, Cliente other);
public Comparator asc() {
return this;
}
public Comparator desc() {
return Collections.reverseOrder(this);
}
O que eu não entendi é porque tem um método abstrato em um enum, não faz com que ele também seja abstrato, sabendo que um Enum jamais poderia ser abastrato