java - 为什么 Collections.binarySearch() 不能使用这个可比对象?

标签 java generics collections binary-search comparable

我有这个Player实现 Comparable 的类界面。然后我有一个 ArrayListPlayer秒。我正在尝试使用 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/

相关文章:

c# - 如何编写一个好的离线-在线调度程序

swift - 使用泛型在 Swift 中实现类似 registerClass 的行为

java - 为什么枚举在 java.utils 中被转换为 ArrayList 而不是 List?

java - Spring 启动: Autowired error

java - 确定与椭圆形的交点

java - 字符串 [] 值与字符串值 []

javascript - D3 - 如何根据行索引合并 2 个数组

java - 如何在workmanager Android上传递输入数组列表

Java抽象类用泛型实现

java - 末尾带有 null 的集合比较器