2009-12-17 48 views
1

我有這個Player類,它實現Comparable接口。然後,我有PlayerArrayList秒。我試圖用binarySearch()Player單子上找到一個Player,但Java是給了我一個「cannot find symbol: method binarySearch(java.util.ArrayList< Player>,Player)」。爲什麼不Collections.binarySearch()與此相當的工作?

這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()這份名單上的,它的工作原理。

+0

,你能否告訴我們,調用Collections.binarySearch的代碼? – daveb

回答

13

使用的都是使用泛型不一致。注意編譯器警告。始終提供泛型參數(或從不提供)。

相反的:

class Player implements Comparable { 
    [...] 
    public int compareTo(Object o) { 

使用

class Player implements Comparable<Player> { 
    [...] 
    public int compareTo(Player o) { 

泛型的規則是不罕見類型的併發症非常困難。所以,如果你把它們混合起來,通常語言規範就會放棄。

+0

這個問題解決了。謝謝。我一定錯過了文檔中的那一部分。 – fent

+0

該死的很好,+1 – whiskeysierra

1

只要你正在實現Comparable,你可以通過compareTo()也覆蓋equals()hashCode()equals()一致。這是在這種情況下特別容易,因爲你可以簡單地委託給String。此外,它的方便,如果你需要的Player一個Map含實例:

class Player implements Comparable<String> { 

    private String username; 
    private String password; 

    // ... 

    @Override 
    public int compareTo(String name) { 
     return username.compareTo(name); 
    } 

    @Override 
    public boolean equals(Object obj) { 
     return obj instanceof Player 
      && username.equals(((Player)obj).username); 
    } 

    @Override 
    public int hashCode() { 
     return username.hashCode(); 
    } 
} 
相關問題