使用计时器在 Java 中创建通用任务

Creating a generic task in Java using a timer

在一个Android游戏中,我问玩家一个问题,如果玩家没有及时回答,我想在不同的时间后给出不同的提示,最后给出答案。

问题、提示和延迟时间是从外部文件中读取的,格式为 JSON。

我想为每个提示设置一个计时器。在 JavaScript 中,我可以创建一个带有闭包的通用方法,如下所示:

Java脚本代码

<body>
<p id="1">One</p>
<p id="2">Two</p>
<p id="3">Three</p>

<script>
var hints = [
  { id: 1, delay: 1000, text: "Hint 1" }
, { id: 2, delay: 2000, text: "Hint 2" }
, { id: 3, delay: 3000, text: "Hint 3" }
]

hints.map(setTimeoutFor)

function setTimeoutFor(hint) {
  setTimeout(showHint, hint.delay)

  function showHint() {
    element = document.getElementById(hint.id)
    element.innerHTML = hint.text
  }
}
</script>

在 Java 中,我知道我可以为每个提示使用单独的方法,如下所示:

Java代码

import java.util.Timer;
import java.util.TimerTask;

String hint1 = "foo";
CustomType location1 = customLocation;
Timer timer1;
TimerTask task1;

void createTimer1(delay) {
    timer1 = new Timer();
    task1 = new TimerTask() {
        @Override
        public void run() {
            giveHint1();
        }
    };
    timer1.schedule(task1, delay);
}

void giveHint1() {
  timer1.cancel()
  giveHint(hint1, location1);
}

void giveHint(String hint, CustomType location) {
  // Code to display hint at the given location
}

这不优雅。我可以在 Java 中使用什么技术来使它通用,以便我可以对所有提示使用相同的方法?

为什么每个提示都需要一个单独的方法?您可以使用方法参数,如下所示:

// "final" not required in Java 8 or later
void createTimer(int delay, final String hint, final Point location) {
    timer = new Timer();
    task = new TimerTask() {
        @Override
        public void run() {
            giveHint(hint, location);
        }
    };
    timer.schedule(task, delay);
}

void giveHint(String hint, CustomType location) {
  // Code to display hint at the given location
}