【发布时间】:2013-03-21 18:00:15
【问题描述】:
是否有一种内置方法来定义接受特定范围内的值的字段/变量? 我的意思是一种在编译时中解决它的方法。
例如,定义一个 double 变量,它只取 1-10 之间的值。
【问题讨论】:
标签: java variables static field final
是否有一种内置方法来定义接受特定范围内的值的字段/变量? 我的意思是一种在编译时中解决它的方法。
例如,定义一个 double 变量,它只取 1-10 之间的值。
【问题讨论】:
标签: java variables static field final
你能得到的最接近的是
1) 为您的值范围创建一个 Enum,这就是 Enums 的用途。
public Enum MyVals {
ONE(1)
TWO(2)
...
private int val;
MyVals(int val) {
this.val = val;
}
}
see this。当然,这只有在值是离散的(即不是浮点数)时才有效
2) 将字段设为私有并编写一个智能设置器,该设置器会在不可接受的值上爆炸。
public void setVal(int val) {
if (val < 0 || val > 10) throw....;
this.val = val;
}
【讨论】:
不,因为在编译时无法知道您的软件逻辑是否会产生超出范围的值。并且在运行时,本机 sdk 不支持它的实现。但是,您可以包装类型类(例如,使用 Integer 实例创建类 MyInteger 作为由 MyInteger 类中的范围验证方法包装的成员)
【讨论】:
Integer,但你不能扩展它;这是final。
虽然不是用于指定范围的编译时选项,但另一种方法是使用像 Hibernate Validator 这样的验证框架。您可以使用 @Range(min=, max=) 之类的注释来注释您的字段。您使用验证器对象的 validate method 来验证您的对象。
【讨论】:
与您所说的最接近的是枚举,它允许您指定一组固定值。没有办法声明一个整数,但限制它可以拥有的有效值。不过,您可以创建自己的类型并强制执行此类限制。
【讨论】:
您可以将枚举用于此类集合。但我想你也想要一些有意义的值映射。在这种情况下,请维护一个查找 HashTable,其中键为枚举,并为您想要的任何值。
【讨论】: