0

修飾子「final」と run() メソッドで使用されている var について簡単な質問があります。これは私が持っているコードの一部ですが、他のコードは機能しません。私はそれがfirstTime変数に追加できないと思います。これがfinal修飾子でこれを行うことができないためなのか、それともJavaが私を嫌っているだけなのかはわかりません:/

final long firstTime = System.currentTimeMillis();

WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
    if (System.currentTimeMillis() >= firstTime) {
        stop();
    } else {
    firstTime += 5;
    }
}

何が原因か、またはこれを修正する方法を知っている場合は、助けてください。

前もって感謝します!

4

4 に答える 4

2

最終変数は変更できません。それが(本質的に)最終的な定義です。

参照を変更することはできませんが、オブジェクトを変更することはできます。ただし、longここにあるような場合、 newlongが作成され、 の値に割り当てられますfirstTime。これは、参照を変更しようとしているため、違法です。

于 2012-08-18T00:16:57.267 に答える
1

final 変数は、コンストラクターで、または初期化子を介して宣言時にのみ割り当てることができます。

于 2012-08-18T00:17:31.907 に答える
0

好きにする

WorldTasksManager.schedule(new WorldTask() {
@Override
public void run() {
    long firstTime = System.currentTimeMillis();
    if (System.currentTimeMillis() >= firstTime) {
        stop();
    } else {
    firstTime += 5;
    }
}
于 2012-08-18T06:57:09.967 に答える