【问题标题】:Defining Java variables that only accept a specific range of values定义只接受特定范围值的 Java 变量
【发布时间】:2013-03-21 18:00:15
【问题描述】:

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

例如,定义一个 double 变量,它只取 1-10 之间的值。

【问题讨论】:

    标签: java variables static field final


    【解决方案1】:

    你能得到的最接近的是

    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;
    }
    

    【讨论】:

      【解决方案2】:

      不,因为在编译时无法知道您的软件逻辑是否会产生超出范围的值。并且在运行时,本机 sdk 不支持它的实现。但是,您可以包装类型类(例如,使用 Integer 实例创建类 MyInteger 作为由 MyInteger 类中的范围验证方法包装的成员)

      【讨论】:

      • 你可以包装一个Integer,但你不能扩展它;这是final
      【解决方案3】:

      虽然不是用于指定范围的编译时选项,但另一种方法是使用像 Hibernate Validator 这样的验证框架。您可以使用 @Range(min=, max=) 之类的注释来注释您的字段。您使用验证器对象的 validate method 来验证您的对象。

      【讨论】:

        【解决方案4】:

        与您所说的最接近的是枚举,它允许您指定一组固定值。没有办法声明一个整数,但限制它可以拥有的有效值。不过,您可以创建自己的类型并强制执行此类限制。

        【讨论】:

          【解决方案5】:

          您可以将枚举用于此类集合。但我想你也想要一些有意义的值映射。在这种情况下,请维护一个查找 HashTable,其中键为枚举,并为您想要的任何值。

          【讨论】:

            猜你喜欢
            • 2020-01-12
            • 1970-01-01
            • 2013-01-17
            • 1970-01-01
            • 2017-09-13
            • 1970-01-01
            • 2010-12-03
            • 2015-01-01
            • 1970-01-01
            相关资源
            最近更新 更多