java-如何使compareTo方法遵守总协定?

染色体包含许多以不同方式生成的分数.
compareTo方法实际上测试方法的一致性,并相应地返回结果.

返回1:comp = -5 ..- 1

return 0:comp = 0(可能在不同的情况下发生,其中之一是所有分数均相等.

返回-1:comp = 1..5

public int compareTo(Chromosome o) {
    if(o == null)
        return(1);
    int comp = 0;
    comp += Double.compare(getScore(1),o.getScore(1));
    comp += Double.compare(getScore(2),o.getScore(2));
    comp += Double.compare(getScore(3),o.getScore(3));
    comp += Double.compare(getScore(5),o.getScore(5));
    comp += Double.compare(getScore(7),o.getScore(7));
    if(comp == 0)
        return(0);
    if(comp > 0)
        return(1);
    else
        return(-1);
}

我的问题是,如何使这种情况符合comparator合同规定的规则.
显然不是,我不断得到:
java.lang.IllegalArgumentException:比较方法违反了它的常规约定!

解决方法:

如果要实现Comparator接口,则需要使用此方法(假设您的类与Chromosome tpye通用):

int compare(Chromosome o1, Chromosome o2)

但是,在您的情况下,似乎更合适的接口是可比较的. http://docs.oracle.com/javase/7/docs/api/java/lang/Comparable.html

int compareTo(Chromosome o)

通常实现Comparable,以使您的类的实例具有自然的顺序.比较器通常是您要比较的单独类,可用于为您提供几种不同类型的订购.

无论您要实现什么,都需要输入该类:

class Chromosome implements Comparable<Chromosome> 

否则,参数应该是对象,而不是染色体.

上一篇:通过示例学习rholang(下部:课程8-13)


下一篇:Java中接口和类之间的契约