简单Java回调机制无法正常工作问题排查求助
问题分析与解决:Java回调机制失效问题
看你贴的代码,我立刻发现了两个核心问题,咱们一个个拆解:
1. 回调时机错误(最关键的问题)
你在addToList方法里立刻调用了callback.callBackMethod(),但新增元素的逻辑是放在TimerTask里延迟5秒执行的。这就相当于你还没把新东西放进列表,就喊老板来检查——老板当然看不到刚要加的内容,回调自然达不到预期效果。
2. 代码语法/拼写问题
- Boss类实现的接口名写错了:
CallableInterf...应该是CallableInterface,少了后缀字母,编译都通不过; - Boss类的接口实现不完整,没有重写
callBackMethod方法的具体逻辑。
修复后的完整可运行代码
import java.util.ArrayList; import java.util.Timer; import java.util.TimerTask; // 回调接口定义 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); callback.callBackMethod(); // 把回调移到这里,时机才对! } }, 5000); // 原来的回调在这里,时机错误,直接删掉 } public void printList(){ System.out.println(Worker.names); } } // 回调方:实现回调接口,接收任务完成通知 class Boss implements CallableInterface { private Worker worker; public Boss(Worker worker) { this.worker = worker; } @Override public void callBackMethod() { // 回调触发时,打印最新的列表 System.out.println("任务完成,当前列表内容:"); worker.printList(); } } // 测试入口 public class CallbackDemo { public static void main(String[] args) { Worker worker = new Worker(); Boss boss = new Boss(worker); worker.addToList("Tesla", boss); System.out.println("等待5秒,任务执行完成后会触发回调..."); } }
核心修复说明
- 调整回调触发时机:把
callback.callBackMethod()移到TimerTask的run()方法内部,确保只有当延迟任务(添加新元素)执行完毕后,才通知回调方,这样拿到的就是最新的列表数据; - 修正接口拼写与实现:补全Boss类的接口实现逻辑,让回调能真正执行预期操作;
- 增加测试逻辑:方便你直接运行验证,执行后会先打印提示,5秒后回调触发,输出包含"Tesla"的完整列表。
内容的提问来源于stack exchange,提问作者Aboodnet
相关产品推荐
相关产品推荐

