java callback
1)可以利用Runnable
//当然我们可以借用下边的线程知识Runnable
void doSomething(Runnable callback){
// 执行其他代码
callback.run();
}
// 参数内的实现实际上就是run方法
doSomething(()-> System.out.println("Hello"));
2)可以用Callable
public void doSomething(Callback<String> callback) {
String result = callback.call();
// 使用result做些事情
}
// 参数内的实现实际上就是call方法
doSomething((name) -> {
return "Hello " + name;
});
3)可以定义泛型
//<T>是为了说明后边的T , 不是T.class而是泛型
//即值不确定,返回和传入啥是啥
<T> T doSomething(Callable<T> callable) {
T result = callable.call();
return result;
}
String result = doSomething(()-> {
System.out.println("Doing something...");
return "Done!";
});
4)通过interface实现
interface Callback {
void onComplete(String result);
}
class MyTask {
//将callback作为参数传入
void execute(Callback callback) {
// 执行异步任务
String result = "Task result";
// 执行完毕后调用回调方法
callback.onComplete(result);
}
}
public class Main {
public static void main(String[] args) {
MyTask task = new MyTask();
//new 展开拿到上述异步操作的结果
//在执行的时候实现,和在外部实现再给他是一样的,都相当于定义
task.execute(new Callback() {
public void onComplete(String result) {
System.out.println(result);
}
});
}
}