I have this Player
class which implements the Comparable
interface. Then I have an ArrayList
of Player
s. I\'m trying to use <
As long as you are implementing Comparable, you can make compareTo()
consistent with equals()
by also overriding equals()
and hashCode()
. This is particularly easy in this case, as you can simply delegate to String
. Moreover, it's convenient if you ever need a Map
containing instances of Player
:
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();
}
}
Use are using generics inconsistently. Take heed of the compiler warnings. Always supply generic arguments (or never supply them).
Instead of:
class Player implements Comparable {
[...]
public int compareTo(Object o) {
Use
class Player implements Comparable<Player> {
[...]
public int compareTo(Player o) {
The rules of generics are difficult enough without the complication of rare types. So, typically the language spec gives up if you mix them up.