戻り値が指定された範囲にあるメソッドを提供する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
ではありません。
これを明示的に禁止することができない場合、ユーザーが違反しないようにするための最良の方法は何ですか?