Je pense que remplacer compareTo() par un opérateur rend la programmation moins orienté objet (c'est pour moi la clé de voûte du java).
Avec l'objet, on peut tout faire, même avec une Collection.
Si l'on dispose d'une Collection avec des éléments comparables :
1 2 3 4 5 6 7
| Collection Size {
S,
M,
L,
XS,
XL;
} |
On ne peut surcharger compareTo() de Enum car elle est final.
Mais on peut très bien faire ses propres méthodes avec un nom explicite.
On passe un entier au constructeur de la collection afin de définir le rang :
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
| Collection Size {
S(-1),
M(0),
L(1),
XS(-2),
XL(2);
public int iSize = 0;
public Size(int iSize) {
this.iSize = iSize;
}
public int compareToSize(Size s) {
return iSize - s.iSize;
}
public boolean isGreaterThanSize(Size s) {
return iSize > s.iSize;
}
public boolean isSmallerThanSize(Size s) {
return iSize < s.iSize;
}
} |
On devrait même surcharger equals() pour comparer le rang.
L'utilisation est très explicite :
if (s1.isGreaterThanSize(s2)) System.out.println("vous êtes sûr que vous faites du 36?")
Partager