java回调

如果我们要测试一个类的方法的执行时间,通常我们会这样做:

public  class  TestObject {  
/**
* 一个用来被测试的方法,进行了一个比较耗时的循环
*/
public static void testMethod(){
for ( int i= 0 ; i< 100000000 ; i++){

}
}
/**
* 一个简单的测试方法执行时间的方法
*/
public void testTime(){
long begin = System.currentTimeMillis(); //测试起始时间
testMethod(); //测试方法
long end = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}

public static void main(String[] args) {
TestObject test=new TestObject();
test.testTime();
}
}


大家看到了testTime()方法,就只有"//测试方法"是需要改变的,下面我们来做一个函数实现相同功能但更灵活:

首先定一个回调接口:

public   interface  CallBack {  
//执行回调操作的方法
void execute();
}

然后再写一个工具类:


public   class  Tools {  

/**
* 测试函数使用时间,通过定义CallBack接口的execute方法
* @param callBack
*/
public void testTime(CallBack callBack) {
long begin = System.currentTimeMillis(); //测试起始时间
callBack.execute(); ///进行回调操作
long end = System.currentTimeMillis(); //测试结束时间
System.out.println("[use time]:" + (end - begin)); //打印使用时间
}

public static void main(String[] args) {
Tools tool = new Tools();
tool.testTime(new CallBack(){
//定义execute方法
public void execute(){
//这里可以加放一个或多个要测试运行时间的方法
TestObject.testMethod();
}
});
}

}


大家看到,testTime()传入定义callback接口的execute()方法就可以实现回调功能

转自:http://kidult.iteye.com/blog/148982
### Java回调机制的使用示例 Java中的回调机制是一种通过传递对象或方法来实现事件驱动编程的模式。这种机制允许一个对象在特定事件发生时调用另一个对象的方法[^1]。以下是一个详细的代码示例,展示了如何在Java中实现回调机制: ```java // 定义接口ICallBack,包含需要被回调的方法 public interface ICallBack { void postExec(String message); } // 实现接口的类MyClass public class MyClass implements ICallBack { @Override public void postExec(String message) { System.out.println("MyClass的postExec方法被回调了:" + message); } } // 包含回调方法的类FooBar public class FooBar { private ICallBack callBack; // 设置回调对象 public void setCallBack(ICallBack callBack) { this.callBack = callBack; } // 模拟某个事件触发,调用回调方法 public void doSomething() { if (callBack != null) { callBack.postExec("事件已触发"); } } } // 测试类 public class Test { public static void main(String[] args) { FooBar foo = new FooBar(); // 使用匿名内部类设置回调 foo.setCallBack(new ICallBack() { @Override public void postExec(String message) { System.out.println("匿名类的postExec方法被回调了:" + message); } }); // 触发事件并调用回调方法 foo.doSomething(); // 使用Lambda表达式简化回调实现(Java 8及以上版本) foo.setCallBack(result -> System.out.println("Lambda表达式的回调:" + result)); foo.doSomething(); // 使用具体实现类设置回调 MyClass myClass = new MyClass(); foo.setCallBack(myClass); foo.doSomething(); } } ``` 在这个示例中,`FooBar`类通过`setCallBack`方法接收一个实现了`ICallBack`接口的对象,并在`doSomething`方法中调用该对象的`postExec`方法[^5]。此外,还展示了如何使用匿名内部类和Lambda表达式来简化回调的实现[^2]。 ### 回调机制的优点 - **灵活性**:通过回调机制,可以将代码逻辑分离,使程序更加灵活。 - **可扩展性**:支持多种不同的实现方式,例如匿名类、Lambda表达式等。 - **代码复用**:通过接口或抽象类定义通用行为,便于代码重用[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值