J'écris une petite bibliothèque où j'ai quelques interface
fournissant une méthode où la valeur de retour doit être dans une plage spécifiée. Comment puis-je interdire explicitement aux utilisateurs de ma bibliothèque qui implémentent cette méthode de renvoyer une valeur qui ne se trouve pas dans cette plage?Restreindre la valeur de retour d'une interface à une plage dans l'implémentation des classes
Quelque chose comme ceci:
//Library
interface FavoriteNumber {
//returned value must lie between 0 and 10
double whatsYourFavoriteNumberBetweenZeroAndTen();
}
...
//Classes implemented by user of library
class ILikePi implements FavoriteNumber {
@Override
public double whatsYourFavoriteNumberBetweenZeroAndTen() {
return 3.141; //Should be allowed
}
}
...
class AnswerToLifeTheUniverseAndEverything implements FavoriteNumber {
@Override
public double whatsYourFavoriteNumberBetweenZeroAndTen() {
return 42; //Should be forbidden
}
}
Je pense que je pourrais écrire quelque chose comme
class DoubleBetweenZeroAndTen {
private final double value;
DoubleBetweenZeroAndTen(double value) {
if (value < 0 || value > 10) {
throw new IllegalArgumentException("value must be between 0 and 10");
}
this.value = value;
}
double toDouble() {
return this.value;
}
}
et retourner ce lieu du double
mais cela ne se sent pas assez bon, car il est un double
entre 0 et 10 que vous souhaitez utiliser par la suite, et non DoubleBetweenZeroAndTen
.
S'il n'est pas possible d'interdire cela explicitement, quel est le meilleur moyen de s'assurer que l'utilisateur ne le violera pas? (En ce moment, j'ai un avis dans la javadoc.)