我正在编写一个小型库,其中我有一些
类似这样:
我认为我可以写出类似以下的内容:
接口
提供了一种方法,其返回值应该在指定范围内。如何明确禁止实现此方法的库用户返回不在此范围内的值?类似这样:
//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;
}
}
而不是 double
,但这样做并不够好,因为之后你想要使用的是介于0和10之间的double
,而不是DoubleBetweenZeroAndTen
。
如果无法明确禁止此操作,那么如何最好地确保用户不会违反它?(现在,在javadoc中有一个通知。)