使用计时器在 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
}
在一个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
}