2015-01-10 47 views
0

在Android遊戲中,我問玩家一個問題,我想在不同的時間長度後給出不同的提示,最後給出答案,如果玩家未能及時回答。使用計時器在Java中創建通用任務

問題,提示和延遲時間是從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中使用哪些技術來製作這種通用的,以便我可以對所有提示使用相同的方法?

回答

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 
}