我有这个Player
实现 Comparable
的类界面。然后我有一个 ArrayList
的 Player
秒。我正在尝试使用 binarySearch()
在 Player
的名单上我们去找一个 Player
,但 Java 给了我一个“cannot find symbol: method binarySearch(java.util.ArrayList< Player>,Player)
”。
这是 Player 类:
class Player implements Comparable {
private String username;
private String password;
Statistics stats;
//Constructor, creates a new Player with a supplied username
Player(String name) {
username = name;
password = "";
stats = new Statistics();
}
//Accessor method to return the username as a String
String getName() {
return username;
}
String getPassword() {
return password;
}
void setPassword(String newPass) {
password = newPass;
}
//Method to change the username
void setName(String newName) {
username = newName;
}
public int compareTo(Object o) {
return username.compareTo(((Player)o).username);
}
}
奇怪的是,当我在同一个列表上尝试 Collections.sort() 时,它起作用了。
最佳答案
使用不一致地使用泛型。注意编译器警告。始终提供通用参数(或从不提供它们)。
代替:
class Player implements Comparable {
[...]
public int compareTo(Object o) {
使用
class Player implements Comparable<Player> {
[...]
public int compareTo(Player o) {
没有稀有类型的复杂性,泛型规则已经足够困难了。因此,如果您将它们混淆,通常语言规范会放弃。
关于java - 为什么 Collections.binarySearch() 不能使用这个可比对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1924728/