Java 函数回调机制简单使用

755 阅读3分钟
原文链接: zhuanlan.zhihu.com
本文系作者原创,如需转载请注明出处!

一、简介

在之前学校中(现在在做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、输出结果

三、结语

从上面的例子,不难看出,其实回调函数并不难,主要是理解。写代码也是一样的,只要你理解了,掌握了编码的思想,那就一切问题都不是问题