一般来说分为以下几步:
- 声明回调函数的统一接口interface A,包含方法callback();
- 在调用类caller内将该接口设置为私有成员private A XXX;
- 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX);
- caller的某个方法dosth()中会用到XXX.callback()方法;
- 在caller的实例中,先实现A接口,后调用dosth()方法;
网上流行的例子:
//回调函数接口及方法
public interface ICallback {
public void func();
}
//回调函数接口实现类
public class ClassWithCallbackFunction implements ICallback{
public ClassWithCallbackFunction() {
}
public void func(){
System.out.println("cccccccccccccccccc");
}
}
public class Caller {
private ICallback callback; //私有接口成员
public void setCallback(ICallback callback) {
this.callback = callback; //接口成员的实现:从外部传入
}
public void doCallback() { //回调接口成员的方法
callback.func();
}
}
}
public class MainClass {
public MainClass() {
}
public static void main(String[] args) {
Caller caller = new Caller();
caller.setCallback(new ClassWithCallbackFunction() {
public void func() {
System.out.println("aaaaaaaaaa");
}
});
caller.doCallback(); //实现回调
}
}
//现实中是把doCallback()方法放在setCallback里调用,以上是为了说明回调原理
public class Caller {
ICallback callback;
public void doCallback() {
callback.func();
}
public void setCallback(ICallback callback) {
this.callback = callback;
doCallback();
}
}
另一个例子是JAVA排序的compare接口
interface Compare {
boolean lessThan(Object lhs, Object rhs);
boolean lessThanOrEqual(Object lhs, Object rhs);
}
import java.util.*;
public class SortVector extends Vector {
private Compare compare; // 私有接口成员
public SortVector(Compare comp) {
compare = comp;
}
public void sort() {
quickSort(0, size() - 1);
}
private void quickSort(int left, int right) {
if(right > left) {
Object o1 = elementAt(right);
int i = left - 1;
int j = right;
while(true) {
while(compare.lessThan(
elementAt(++i), o1))
;
while(j > 0)
if(compare.lessThanOrEqual(
elementAt(--j), o1))
break;
if(i >= j) break;
swap(i, j);
}
swap(i , right);
quickSort(left, i-1);
quickSort(i+1, right);
}
}
private void swap(int loc1, int loc2) {
Object tmp = elementAt(loc1);
setElementAt(elementAt(loc2), loc1);
setElementAt(tmp, loc2);
}
}
分享到:
相关推荐
在Java编程中,回调函数是一种设计模式,它允许我们在代码执行过程中插入自定义的行为,特别是在异步编程或者事件处理中非常常见。回调函数的核心思想是将一个函数作为参数传递给另一个函数,然后在适当的时候由被...
在Android开发中,回调函数是一种常见的编程模式,用于在特定事件发生时通知并允许其他对象进行相应的处理。回调函数在Android中的应用广泛,比如在异步任务完成、用户界面更新或者网络请求完成时,都会用到回调。...
在Android开发中,回调函数(Callback Function)是一种重要的设计模式,它允许代码在特定事件发生时执行自定义操作。...在学习和实践中,理解并熟练运用回调函数对于提升Android开发技能至关重要。
### Java中的回调函数详解 #### 一、回调函数的基本概念 在Java中,回调函数是一种特殊的函数,它允许用户在程序执行过程中返回控制权给调用方,从而实现某些特定的功能或逻辑。这种机制通常通过接口(interface)...
总的来说,"IO 目录列表器 回调函数 Thinking in java 4"这个主题涵盖了Java I/O操作,特别是目录遍历,以及如何利用回调函数(如Lambda表达式)来处理目录中的每个文件。这样的技术在实际项目中非常常见,比如日志...
### DWR取得回调函数返回值案例详解 #### 一、DWR简介 DWR (Direct Web Remoting) 是一种简化Ajax应用开发的技术框架。...通过以上内容的学习,相信读者对DWR中如何获取回调函数返回值有了更深入的理解。
4. **回调函数原理**:在JNI中,回调机制通常是通过在本地代码中保存对Java对象的引用,然后在适当的时候通过这个引用调用Java的方法。这需要理解`jobject`、`jclass`、`jmethodID`等数据类型,以及如何使用`...
Lambda表达式可以简化回调函数的实现,使代码更易读。 2. **函数式接口**: 为了使用Lambda表达式,必须有一个合适的函数式接口。函数式接口是指只有一个抽象方法的接口,如Runnable、Callable和Comparator。Java ...
在C++中,回调函数通常与C语言的函数指针密切相关,但在现代C++中,可以使用函数对象(Functors)、Lambda表达式或者std::function来实现更安全、更灵活的回调机制,避免了C风格回调函数的一些限制和潜在问题。...
回调函数的概念源自函数式编程,但在面向对象编程中也得到了广泛的应用。在Java中,通常通过接口来实现回调机制,这正是“Java简单的回调(interface)demo”所展示的。下面我们将深入探讨这个主题。 首先,理解回...
对于熟悉Java等其他编程语言的开发者而言,回调函数的这一概念与Java中的接口回调相似,这将有助于他们更快地理解并运用JavaScript的回调机制。在Java中,回调通常是通过接口实现的,而JavaScript中则使用函数指针来...
在Android开发中,回调函数机制是一个至关重要的概念,它允许我们定义行为并在特定事件发生时自动执行这些行为。...通过以上讲解,你应该对Android中的回调函数有了更深入的理解,希望这对你的学习有所帮助。
【标题】"OSS文件上传(带回调)"指的是在Spring Boot应用中集成对象存储服务(Object Storage Service,简称OSS),并实现文件上传功能,同时具备回调机制,即在文件上传完成后,系统会自动执行预设的回调函数,通常...
为了安全地实现JavaScript与Java的交互,我们需要对调用函数和回调函数进行包装,以确保只有预期的接口可以被访问。 描述中提到的功能包括: 1. **支持异步回调**:在JavaScript和Java之间传递复杂操作时,异步回...
这在回调函数和高阶函数中非常常见。 **6. 变量作用域:** 在函数内部定义的变量只有在该函数内部可见,称为局部变量。全局变量在整个程序中都可见,但使用时需谨慎,避免引发意外的副作用。 **7. 函数重载:** ...
- **线程生命周期管理**:在本地线程中回调Java方法后,记得使用`JavaVM->DetachCurrentThread()`来分离线程,否则可能导致JVM泄漏。只有主线程(由Java方法启动的线程)是自动附着的,其他线程需要手动附着和分离。...
这对于编写简洁的回调函数和处理集合非常方便。 6. **方法引用(Method References)**:与Lambda表达式关联,Java 8也引入了方法引用,它可以直接引用类的静态方法或对象的实例方法,而无需写出完整的Lambda表达式...
在多层嵌套的回调函数中,代码可读性和维护性可能会急剧下降,这被称为“回调地狱”。为了解决这个问题,可以采用以下策略: - 使用Promise和async/await:Promise允许我们将异步操作转换为类似同步的代码,而...
当我们创建一个类并实现这个接口,我们实际上定义了一个回调函数。然后,我们可以将这个实现类的实例传递给事件生成器,当事件发生时,事件生成器会调用我们的`onEvent()`方法,这就是回调的执行过程。 代理机制则...
Lambda表达式的使用简化了回调函数的编写,尤其是在处理集合操作时,如排序、过滤和映射。 Stream API是Java 8的另一个重要创新,它提供了对数据集合进行声明性处理的能力,就像SQL查询数据库一样。Stream可以看作...