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