如何在Java中声明变量的当前值为final?

时间:2016-05-03 20:45:20

标签: java final

我目前正在用Java编写一个程序,其中移动对象需要在生成新对象时将其位置设置为其最终位置,以便它们不再受键盘命令的影响。我熟悉将实例变量声明为final,但我正在寻找一种在实例化后锁定变量的方法。

boolean beentype = StdDraw.hasNextKeyTyped();
if (beentype) {
    if (this.y > 1) {
        char key = StdDraw.nextKeyTyped();
        char a1 = 'a';
        char d = 'd';

        if (key == a1 && this.x > 2 && position [i-1][j] == 0) {
            this.x = this.x - movePerCall;
            j = j + 1;
            position[i + 1][j - 1] = 0;
            position[i][j - 1] = 0;
            position[i][j] = 1;

        }

        if (key == d && this.x < 19 && position [i-1][j] == 0) {
            this.x = this.x + movePerCall;
            j = j - 1;
            position[i + 1][j + 1] = 0;
            position[i][j + 1] = 0;
            position[i][j] = 1;
        }
    }

一旦变量满足了它的isDone布尔要求,我希望this.x和this.y不再改变 谢谢

1 个答案:

答案 0 :(得分:3)

虽然改变设计可能有意义,但我不知道你需要这个功能的问题,因为你要求一个可锁定的整数类:

public class LockableInt {

  private int value;
  private boolean locked = false;

  public LockableInt(int initial) {
     value = initial;
  }

  public void setLock(boolean locked) { this.locked = locked; }

  /* Sets the value if not locked, otherwise does nothing.
   */
  public void setValue(int value) {
    if (!locked) { 
      this.value = value; 
    }
  }

  public int getValue() {
    return value;
  }
}

现在如果您使用此类而不是普通int

而不是this.x = this.x - movePerCall;你会this.x.setValue(this.x.getValue() - movePerCall);,如果该值应该被锁定,那么你需要this.x.setLock(true),然后对this.x.setValue(...)的每次后续调用都不起作用。

如果它不仅仅是您希望将来锁定的整数类型的变量:

您当然可以轻松地对我在上面发布的课程进行格式化,并将其重复用于您在应用程序中使用的任何类型。