接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
成都创新互联公司于2013年成立,先为拜泉等服务建站,拜泉等地企业,进行企业商务咨询服务。为拜泉企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
示例代码:
interface People{ //接口
void peopleList();
}
class Student implements People{ //接口实现类
public void peopleList(){ //实现接口方法
System.out.println("I'm a student.");
}
}
class Teacher implements People{ //接口实现类
public void peopleList(){ //实现接口方法
System.out.println("I'm a teacher.");
}
}
public class Example{
public static void main(String args[]){
People a; //声明接口变量
a=new Student(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
a=new Teacher(); //实例化,接口变量中存放对象的引用
a.peopleList(); //接口回调
}
}
输出结果:
I’m a student.
I’m a teacher.
你好,我写了个很简单的代码,你一看就明白了
public class A {
int value = 1001;
public A() {// A的构造函数,执行B的exec()方法,里面又带有对A的getValue()方法调用,这个就叫做回调
B b = new B(this);
b.exec();
}
public int getValue() {
return value;
}
public static void main(String[] args) {
new A();//构造函数里已经发生了回调,所以不需要更多的代码
}
}
class B {
private A a;
public B(A a) {
this.a = a;
}
public void exec() {
System.out.println(a.getValue());// 这里调用了a的getValue()方法
}
}
所谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数。
用DOM4J写解析xml文档的例子
如下:
SAXReader sax = new SAXReader();
String file = this.getServletContext().getRealPath("/xml/news.xml");//获得xml文档的路径
Document doc = sax.read(file);
//获得根元素坐标
Element root = doc.getRootElement();
String value = "";
List nodes = root.selectNodes("//new");
//得到元素个数
int size = nodes.size();
//定位到最后一个元素
Element el = (Element) nodes.get(size - 1);
//得到该元素所有属性集合
Iterator it = el.attributeIterator();
//循环遍历
while (it.hasNext()) {
//将集合中包含的元素转换为Attribute类型
Attribute att = (Attribute) it.next();
//取出里面的数值
value = att.getValue();
}
这样 所有的值就能都取出来了
不过 要导入这几个包包
org.dom4j.*
org.dom4j.io.*
java.util.*
java.io.*
程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
假设我是程序员A,以下是我的程序a:
[java] view plaincopyprint?
public class Caller
{
public MyCallInterface mc;
public void setCallfuc(MyCallInterface mc)
{
this.mc= mc;
}
public void call(){
this.mc.method();
}
}
还需要定义一个接口,以便程序员B根据我的定义编写程序实现接口。
public interface MyCallInterface
{
public void method();
}
于是,程序员B只需要实现这个接口就能达到回调的目的了:
public class B implements MyCallInterface
{
public void method()
{
System.out.println("回调");
}
public static void main(String args[])
{
Caller call = new Caller();
call.setCallfuc(new B());
call.call();
}
}
简单的你会写,那就好办,直接上代码
public interface TestAPI extends StdCallLibrary {
interface LoginReply extends StdCallCallback {
/**
* 登录回调
*/
void invoke(String userId, long retCode, String retMsg);
}
/**
* 注册一个登录回调方法.此方法是dll提供的
*/
void RegisterLoginReply(LoginReply loginReply);
}
/**
* 实现登录回调方法
*/
private class LoginReplyCallBack implements TestAPI.LoginReply {
@Override
public void invoke(String userId, long retCode, String retMsg) {
log.info("登录回调方法:{},{},{}", userId, retCode, retMsg);
}
}
// 设置登录回调
api.RegisterLoginReply(loginReplyCallBack);