在Android游戏中,我问玩家一个问题,我想在不同的时间长度后给出不同的提示,如果玩家未能及时回答,最后给出答案。
问题,提示和延迟时间是从JSON格式的外部文件中读取的。
我想为每个提示设置一个计时器。在JavaScript中,我可以创建一个带闭包的泛型方法,如下所示:
JavaScript代码
<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中使用哪些技术来实现这种通用,以便我可以对所有提示使用相同的方法?
答案 0 :(得分:1)
为什么每个提示都需要单独的方法?您可以使用方法参数,如下所示:
// "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
}