2

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

4

4 回答 4

1

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

另一个想法:

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

于 2013-08-12T07:09:52.653 回答
1

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

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;
      }
   }
}
于 2013-08-12T07:11:25.890 回答
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;
        }
    }

}
于 2013-08-12T07:17:40.253 回答
1

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

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

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

于 2013-08-12T07:19:54.810 回答