我想使用 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.searchCounters
和 counterRegistry.getAllCounters
方法的返回类型在 Counter 类中不是通用的。