5

特定の範囲の値を受け入れるフィールド/変数を定義する組み込みの方法はありますか? コンパイル時に解決する方法を意味します。

たとえば、1 ~ 10 の値のみを取るdouble変数を定義します。

4

5 に答える 5

5

あなたが得ることができる最も近いものは

1)値の範囲の列挙型を作成します。これが列挙型の目的です。

public Enum MyVals {
   ONE(1)
   TWO(2)
   ...

   private int val;
   MyVals(int val) {
      this.val = val;
   }
}

これを参照してください。もちろん、これは値が離散的である(つまりフロートではない)場合にのみ機能します

2)フィールドをプライベートにし、許容できない値で爆発するスマートセッターを作成します。

public void setVal(int val) {
   if (val < 0 || val > 10) throw....;
   this.val = val;
}
于 2013-03-21T18:03:12.437 に答える
3

いいえ、コンパイル時にソフトウェアロジックが範囲外の値を生成するかどうかを知る方法がないためです。また、実行時には、ネイティブSDKでサポートされている実装はありません。ただし、型クラスをラップすることはできます(たとえば、クラス内の範囲検証メソッドによってラップされたメンバーとしてインスタンスを使用してクラスMyIntegerを作成します)IntegerMyInteger

于 2013-03-21T18:04:14.993 に答える
1

範囲を指定するためのコンパイル時のオプションではありませんが、別のアプローチはHibernate Validatorのような検証フレームワークを使用することです。@Range(min=, max=)のような注釈を使用してフィールドに注釈を付けます。バリデータ オブジェクトのvalidate メソッドを使用して、オブジェクトを検証します。

于 2013-03-21T19:26:16.623 に答える
0

あなたが話していることに最も近いのは列挙型です。これにより、値の修正セットを指定できます。整数を宣言する方法はありませんが、持つことができる有効な値を制限します。ただし、独自のタイプを作成して、そのような制限を適用することもできます。

于 2013-03-21T18:03:14.843 に答える
0

そのようなセットには列挙型を使用できます。しかし、値の意味のあるマッピングも必要だと思います。その場合、キーを列挙型として使用し、必要な値を指定してルックアップ HashTable を維持します。

于 2013-03-21T18:06:33.810 に答える