本文系作者原创,如需转载请注明出处!
一、简介
在之前学校中(现在在做Android),我就接触了和学习了Java函数回调机制,但是在实际项目中并没有使用过。
最近我在项目中用到,翻翻我的笔记(PS:这可是我的吃饭宝典),虽然现在做的是Android,废话不多说,切入正题:
Java函数回调,也许说的这么专业你并不知道它是干嘛,有啥用。实际上你都有用过,比如多线程的Thread接口就是最典型的例子,当你调用start()函数时,就会触发run()函数。是的,这就是运用的一种方式,下面通过例子来学习下,该如何使用。
这个例子就是实现这样一个功能:
有一个用户类User(属性有name名称和info描述),用户有个技能是编码,所以我们创建一个Code接口(接口中定义一个回调的函数)
创建一个接口具体业务逻辑类OutUser(提供一个接口属性Code code、提供一个设置code的实例函数setUser、提供一个createUser函数,通过该函数实现具体函数的调用)
创建一个接口实现类Realization,编写Code的具体实现
最后创建一个main入口的测试类Test
二、运用
1、创建一个用户User
/*** 描述:用户
* 作者: kimball
* E-mail: kimballlu@foxmail.com
* 日期:2016年11月14日 下午5:00:30
*/
public class User {
private String name;
private String info;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
@Override
public String toString() {
return "User [name=" + name + ", info=" + info + "]";
}
}
2、先创建一个 接口Code,定义一个方法getOutStr(),类似Thread中的run()
/*** 描述:编码实现接口
* 作者: kimball
* E-mail: kimballlu@foxmail.com
* 日期:2016年11月14日 下午4:59:40
*/
public interface Code {
/*** 输出详细信息* @param user*/
public void getOutStr(User user);
}
3、创建接口具体业务逻辑类OutUser
/*** 描述:接口具体业务逻辑类
* 作者: kimball
* E-mail: kimballlu@foxmail.com
* 日期:2016年11月14日 下午5:25:53
*/
public class OutUser {
private Code code;
/*** 创建实例* @param code*/
public void setCode(Code code){
this.code = code;
}
/*** 创建用户* @param user*/
public void createUser(User user){
if(code != null){
/* 通过接口调用getOutStr输出详细信息 */
code.getOutStr(user);
}
}
}
4、创建一个接口实现类Realization
/*** 描述:Code接口实现类
* 作者: kimball
* E-mail: kimballlu@foxmail.com
* 日期:2016年11月14日 下午5:57:14
*/
public class Realization implements Code {
private static OutUser outUser;
public void a(){
outUser = new OutUser();
// 实例化outUser.setCode(this);
User newuser = new User();
newuser.setName("张三");
newuser.setInfo("张三在认真的进行编码工作");
outUser.createUser(newuser);
}
@Override
public void getOutStr(User user) {
// 此时会通过函数回调机制,之前创建的user会返回给该函数System.out.println(user.toString());
}
}
5、编写测试类
/*** 描述:测试类
* 作者: kimball
* E-mail: kimballlu@foxmail.com
* 日期:2016年11月14日 下午4:58:43
*/
public class test {
public static void main(String[] args) {
new Realization().a();
}
}
6、输出结果
三、结语
从上面的例子,不难看出,其实回调函数并不难,主要是理解。写代码也是一样的,只要你理解了,掌握了编码的思想,那就一切问题都不是问题