有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在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布尔要求,我就会这样做。x和这个。我不想再改变了 多谢各位


共 (1) 个答案

  1. # 1 楼答案

    虽然更改设计可能是有意义的,但我不知道您到底需要这个功能来解决哪个问题,因为您要求的是一个可锁定的整数类:

    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(...)的每个后续调用都将无效

    如果将来要锁定的不仅仅是整型变量:

    当然,您可以轻松地泛化我在上面发布的类,并将其重新用于应用程序中使用的任何类型