java - 即使实现了可比性,也无法将类转换为 java.lang.Comparable

标签 java sorting arraylist comparable

<分区>

我想使用 Collections.sort() 方法对包含“Counter”对象的数组列表进行排序。我已经在 Counter 类中实现了可比较的接口(interface)。我仍然得到一个类(class) Actor 异常(exception)。我已经发布了下面的代码。

public class Counter implements Comparable<Counter>, java.io.Serializable {

    private String description;

    public Counter() {
    }

    public Counter(String description) {

        this.description = description;

    }

    public int compareTo(Counter other) {
        return description.compareTo(other.description);
    }
}

下面的方法是我调用排序方法的地方。

    protected List < Counter > prepareCounters(final Integer authorityID) throws ServiceException {
    if (authorityID == null) {
        return new ArrayList < Counter >();
    }

    List < Counter > countersInRegistry = new ArrayList < Counter >(counterRegistry.getAllCounters());
    List < Counter > countersFromService =
            new ArrayList < Counter >(counterService.searchCounters(authorityID, null, null));
    countersFromService.removeAll(countersInRegistry);
    Collections.sort(countersFromService);
    return countersFromService;
}

最佳答案

正在为我工​​作,(OpenJDK7)>

//主要---------------------------------------- --------

package stackover_basic;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class StackOver_basic {
    public static void main(String[] args) {
        List<Counter> asList = Arrays.asList(new Counter("xx"), new Counter("aa"), new Counter("zz"));
        System.out.println("before" + asList);
        Collections.sort(asList);        
        System.out.println("after" + asList);
   }
}

//计数器---------------------------------------- -----

public class Counter implements Comparable<Counter>, java.io.Serializable {

    private String description;

    public Counter() {
    }

    public Counter(String description) {
        this.description = description;
    }

    @Override
    public int compareTo(Counter other) {
        return description.compareTo(other.description);
    }

    @Override
    public String toString() {
        return "Counter{" + "description=" + description + '}';
    }
}

输出>

run:
before[Counter{description=xx}, Counter{description=aa}, Counter{description=zz}]
after[Counter{description=aa}, Counter{description=xx}, Counter{description=zz}]

编辑:classCastExc 很可能来自您对 compareTo 的定义。原因:您向集合中添加了错误的对象,即 counterService.searchCounterscounterRegistry.getAllCounters 方法的返回类型在 Counter 类中不是通用的。

关于java - 即使实现了可比性,也无法将类转换为 java.lang.Comparable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19405290/

相关文章:

ios - 根据三个变量对数组进行排序

firebase - 如何让 firebase 按日期顺序存储文件?

java - 比较java中两个不同的List对象

java - 查找 ArrayList 中与常量相比差异最小的元素

java - 如何在java中将 map 转换为二维数组?

java - 运行时获取服务器上的 Corba 客户端 Activity

java - Spring AOP,切入点表达式 : annotation with specific param

java - ActiveMQ 消息驱动 bean 到 JSF

java - 如何读取二进制文件中的整数和日期

java - 按特定字符串值对字符串数组进行排序