我正在学习Java的一些例子,但我似乎不能使用Collections.sort对我的列表进行排序。目前,我的代码如下:
// Person class in package application.domain
package application.domain;
public class Person implements Identifiable, Comparable<Identifiable> {
private String name;
private String id;
// ...Constructor...
// ...Accessors for getName and getPersonID...
@Override // from interface "Identifiable"
public String getID(){
return getPersonID();
}
public int compareTo(Identifiable another) {
return this.getID().compareTo(another.getID());
}
//... toString ...
}// Register class implementation
package application.domain;
import java.util.*;
public class Register {
private HashMap<String, Identifiable> registered;
// ...Constructor - initialize hashmap ...
public void add(Identifiable toBeAdded){
this.registered.put(toBeAdded.getID(), toBeAdded);
}
// get
public Identifiable get(String id){ return this.registered.get(id); }
// getAll - must be generalized to work
public List<Identifiable> getAll(){
return new ArrayList<Identifiable>(registered.values());
}
// sortAndGetEverything (ERROR)
public List<Identifiable> sortAndGetEverything(){
List<Identifiable> all = new ArrayList<Identifiable>(registered.values());
Collections.sort(all); // <- part of code that gives an error
return all;
}
} 输出如下:

*请注意,带省略号的注释用于缩写不相关的部分
我怀疑的是Person类的toCompare可能是问题所在,因为它正在比较字符串...然而,我在网上查找了一下,似乎用.compareTo方法比较两个不同的字符串是有效的。我尝试将ArrayList转换为List,但仍然有相同的错误。我没有想法,所以我不想如果任何人有任何建议来解决这个问题。提前谢谢你。
发布于 2019-10-30 13:25:48
您可以从Comparable扩展Identifiable接口
public interface Identifiable extends Comparable<Identifiable> {
String getID();
}现在,您不需要在Person类中实现可比较类,并且Collections.sort()现在应该可以工作了
发布于 2021-04-11 11:51:58
您只需在第一个java文件中添加一行:
import java.lang.*我遇到了和你一样的错误,我通过上面提到的解决方案解决了它。我认为发生这种情况的原因是编译器无法识别cumtomer compareTo函数。
https://stackoverflow.com/questions/58619111
复制相似问题