2016-05-03 47 views
2

我目前正在用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不再變化 謝謝

+2

您無法做出從非最終變爲最終變量的變量。不過,您可以使用非最終變量的值來初始化最終變量。 –

+0

您是否考慮將x和y移動到另一個(新)班,讓他們變得私密,而不是提供二傳手?所以你可以讓它們最終並在構造函數中設置它們的值。 – Jaumzera

+2

如果您有一個名爲「finalPosition」的字段,並將當前位置與該位置進行比較,如果您在那裏則不會移動該怎麼辦? –

回答

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(...)每個後續調用將沒有任何效果。

如果你想在未來鎖定整數類型的不只是變量:

你當然也可以很容易地泛型化,我上面張貼類和重用,對你在你的應用程序中使用任何類型的。

+0

非常感謝!那很完美! – JavaStudent90000

+0

所以如果你覺得它很完美,你可能會把它標記爲答案:D – Jan