Implémenter l’interface Comparable
Bonjour à tous,
Je ne comprends pas un bogue trouvé par findBug.
Voici mon code :
Code:
1 2 3 4 5 6 7 8
|
public class Test implements Comparable<Object> {
int attribut;
public int compareTo(Object o) {
return attribut - ((Test) o).attribut;
}
} |
findBug dit «Test defines compareTo(Object) and uses Object.equals()».
Voici la description du bogue sur le site de findBug*:
http://findbugs.sourceforge.net/bugD..._OBJECT_EQUALS
Pour moi la condition
Code:
(x.compareTo(y)==0) == (x.equals(y))
est bien respectée.
Est-ce une erreur de findBug? Car il retourne le même message sur le code du livre Pensez en Java*:
http://bruce-eckel.developpez.com/li...chap=10&page=2
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| //: c09:CompType.java
// Implémenter Comparable dans une classe.
import com.bruceeckel.util.*;
import java.util.*;
public class CompType implements Comparable {
int i;
int j;
public CompType(int n1, int n2) {
i = n1;
j = n2;
}
public String toString() {
return "[i = " + i + ", j = " + j + "]";
}
public int compareTo(Object rv) {
int rvi = ((CompType)rv).i;
return (i < rvi ? -1 : (i == rvi ? 0 : 1));
}
private static Random r = new Random();
private static int randInt() {
return Math.abs(r.nextInt()) % 100;
}
public static Generator generator() {
return new Generator() {
public Object next() {
return new CompType(randInt(),randInt());
}
};
}
public static void main(String[] args) {
CompType[] a = new CompType[10];
Arrays2.fill(a, generator());
Arrays2.print("before sorting, a = ", a);
Arrays.sort(a);
Arrays2.print("after sorting, a = ", a);
}
} ///:~ |
Merci pour vos réponses…