【发布时间】:2018-04-05 12:27:29
【问题描述】:
interface CallableInterface
{
void callBackMethod();
}
class Worker
{
public static ArrayList<String> names = new ArrayList<String>();
static Timer t = new Timer();
public void addToList(String newAdd, CallableInterface callback)
{
names.add("BMW");
names.add("DODGE");
t.schedule(new TimerTask() {
@Override
public void run() {
names.add(newAdd);
}
}, 5000);
callback.callBackMethod();
}
public void printList(){
System.out.println(Worker.names);
}
}
class Boss implements CallableInterface
{
Worker w1 = new Worker();
public Boss(String carName)
{
w1.addToList(carName, this);
}
public void callBackMethod()
{
w1.printList();
}
}
public class IntroCallbacks
{
public static void main(String[] args)
{
Boss b = new Boss("Mercedes");
}
}
我正在使用计时器模拟网络延迟。这个想法是等待计时器完成(在本例中为 5 秒),然后打印 arrayList。无论我对代码做什么,我总是只得到[BMW,DODGE]。
应该是 [BMW, DODGE, MERCEDES]。
我错过了什么?
【问题讨论】:
-
您正在调用回调方法,然后,5 秒后,添加 MERCEDES。您可能希望在
run()方法中调用回调。 -
注意:你可以只使用
Runnable而不是定义你自己的CallbackInterface。