java.lang.ClassCastException:无法强制转换为java.lang.Comparable

问题描述 投票:-1回答:1

在这个方法中我想按升序对Float值进行排序,为此我编写了Confidence Comparator类(参见下面的源代码)

public final PriorityQueue<Result> getResults(){
    PriorityQueue outputQueue = new PriorityQueue(createOutputQueue());

    for (int i =0; i<results.length+1;i++){
        Result res = new Result(labels.get(i), results[i]);
        outputQueue.add(res);
    }
    return outputQueue;

}
private final PriorityQueue<Result> createOutputQueue(){
    Comparator<Float> comparator = new ConfidenceComparator();
    return new PriorityQueue(labels.size(),comparator);
}

ConfidenceComparator:

public class ConfidenceComparator implements Comparator<Float> {     

public int compare(Float x, Float y) {                            

   return x.compareTo(y); }

这引发了异常:

"java.lang.ClassCastException: jannik.weber.com.brueckenklassifikator.classifier.Result cannot be cast to java.lang.Comparable" 

outputQueue方法中加入getResults()两个信心之后。

我还尝试在Results类中实现类似的Interface,因为它按自然顺序对值进行排序:

public class Result implements Comparable{
private String result;
private float confidence;

@Override
public int compareTo(Object o) {
    Result other = (Result) o;
    return this.confidence.compareTo(other.confidence);
}

但它显示错误"Cannot resolve method compareTo(float)"

java android comparator comparable
1个回答
0
投票

您没有比较Floats,您正在将Results与其中的浮点值进行比较。所以应该是Comparable<Result>确实。

然后在compareTo中尝试使用此信息,因为置信度不是对象:

return Float.compare(this.confidence, other.confidence);

使用完整的代码:

public class Result implements Comparable<Result> {
    private String result;
    private float confidence;

    @Override
    public int compareTo(Result other) {
        return Float.compare(this.confidence, other.confidence);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.