我正在编写一个小型库,其中有一些interface
提供返回值应在指定范围内的方法。如何明确禁止实现此方法的库用户返回不在此范围内的值?
像这样的东西:
//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
}
}
我想我可以写一些类似的东西
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;
}
}
并返回 this 而不是 thedouble
但这感觉不够好,因为它是一个double
介于 0 和 10 之间的你想要使用的,而不是DoubleBetweenZeroAndTen
.
如果无法明确禁止,那么确保用户不会违反它的最佳方法是什么?(现在,我在 javadoc 中有一个通知。)