0

我不明白为什么它发生在compareTo使用CompareToBuilderApache Commons Lang 3 的方法上,我该如何解决?

课程如下:

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.apache.commons.lang3.builder.CompareToBuilder;

@Data
@EqualsAndHashCode(of = {"segno", "causale", "importi"})
public class SaraReportAggregate implements Comparable<SaraReportAggregate> {

    private final String segno;
    private final String causale;
    private final AggregatoSara importi = new AggregatoSara();

    @Data
    public static class AggregatoSara implements Comparable<AggregatoSara> {

        private long importoTotale;
        private long importoTotaleContanti;
        private long numeroTotaleOperazioni;
        private long numeroTotaleOperazioniContanti;
    
        @Override
        public int compareTo(AggregatoSara other) {
            return new CompareToBuilder()
                    .append(other.importoTotale, this.importoTotale)
                    .append(other.numeroTotaleOperazioni, this.numeroTotaleOperazioni)
                    .append(other.importoTotaleContanti, this.importoTotaleContanti)
                    .append(other.numeroTotaleOperazioniContanti, this.numeroTotaleOperazioniContanti)
                    .toComparison();
        }
    }

    @Override
    public int compareTo(SaraReportAggregate other) {
        return new CompareToBuilder()
                .append(this.importi, other.importi)
                .append(this.causale, other.causale)
                .append(this.segno, other.segno)
                .toComparison();
    }
}

调用碰巧抛出Collections#sort(List)的列表SaraReportAggregate

java.lang.IllegalArgumentException:比较方法违反了它的一般约定!

我应该怎么办?

4

0 回答 0