我在寫一個小型庫,我有一些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;
}
}
,並返回,而不是double
這一點,但這種感覺並不太好,因爲它是一個double
在0到10之間,你想在其後工作,而不是DoubleBetweenZeroAndTen
。
如果不能明確禁止,確保用戶不會違反它的最佳方法是什麼? (現在,我在javadoc中有一個通知。)