5

是否有内置方法来定义接受特定范围内的值的字段/变量?我的意思是在compile-time解决它的一种方法。

例如,定义一个只取 1-10 之间值的双精度变量。

4

5 回答 5

5

你能得到的最接近的是

1)为您的值范围创建一个 Enum,这就是 Enums 的用途。

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具有Integer实例的类作为由类中的范围验证方法包装的成员MyInteger

于 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 回答