【问题标题】:Prevent Int From Being Subtracted防止 Int 被减去
【发布时间】:2013-08-12 07:07:45
【问题描述】:

是否可以防止从 int 中减去? final 关键字在这里不起作用,因为我仍然需要能够添加它。谢谢!

【问题讨论】:

  • 您为什么要这样做?如果你能提供一个很好的例子,也许我们可以提出一个替代方案。
  • 那么有什么办法可以阻止某人添加负数呢?
  • @sparklyllama 请接受给你的答案之一或询问是否缺少某些东西

标签: java int subtraction


【解决方案1】:
public class AddButNoSubtract {

    private int i; // private

    public int getI() {
        return i;
    }

    public void incrementBy(int j) { // instead of setter
        // add if positive
        if (j > 0) {
            // check for overflow
            if (Integer.MAX_VALUE - j >= i)
                this.i += j;
        }
    }

}

【讨论】:

  • 谢谢!这正是我所需要的。
  • @sparklyllama 很高兴为您提供帮助。对该问题 +1。
【解决方案2】:

您可以使用 Integer 包装类而不是 int,因为 Integer 类是不可变的。

另一个想法:

不要将您的字符串公开为公共变量,只需提供修改该 int 的方法即可。如果有人试图减去那个字符串,那么你可以在你的方法中控制它。

【讨论】:

    【解决方案3】:

    即使您只是禁用减法,那么用户仍然可以添加负数...从而绕过您的防御。包装器是您在这里唯一可以使用的东西

    public class myInteger{
       private int innerVal;
    
       public int getInnerVal(){ return innerVal};
    
       public void myInteger(int val) { innerVal = val;}
    
       public void add(myInteger secondInt)
       {
          int sum = innerVal + secondInt.innerVal;
    
          if(sum > innerVal)
          {
              innerVal = sum;
          }
       }
    }
    

    【讨论】:

      【解决方案4】:

      是否可以防止从 int 中减去?

      如果int 变量是可访问的(而不是final),则否。

      做这种事情的唯一方法是使变量不可访问(例如private),然后提供允许调用者发生你想要发生的事情的方法,并禁止你不想发生的事情发生.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-09
        • 1970-01-01
        • 2020-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-02
        相关资源
        最近更新 更多