我是靠谱客的博主 敏感云朵,最近开发中收集的这篇文章主要介绍Java中如何实现接口回调_JAVA接口回调原理简单实现,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

接口回调能实现的核心:接口对象可以被替换为实现这个接口的类的对象

//不会报错

InterfaceA a;

a=new A();

回调一直是一个JAVA中很重要的概念,应用场景:

A.class需要使用B.class的方法,然后A还需要在B的方法执行完毕后,作出对应反应,即在B的方法中还需要回调到将它new出来的A的方法。

为了方便理解,我们用到接口,做个简单的demo:

学生做完了作业,需要找家长检查,家长检查学生的作业是否准确完成,如果完成了就告诉学生可以玩游戏了,否则告诉学生继续做作业。

第一步:建立学生接口:InterfaceStudent (家长可以通过这个接口来找到学生并告诉他需要做的事情)

public interface InterfaceStudent {

void playGame();//学生可以玩游戏了

void doHomework();//学生还要写作业

}

第二步:建立学生类,实现这个接口 并且实现方法CheckHomework()来请家长帮忙检查作业

public class Student implements InterfaceStudent {

public boolean isMyHomeworkFinishde;//判断作业是否写完

private Parents mParents;//这个学生对应的家长

Student(){//重写构造方法 建立学生对象时 也 建立其对应家长对象

mParents=new Parents(this);

}

void setMyHomeworkFinishde(boolean isMyHomeworkFinishde){

this.isMyHomeworkFinishde=isMyHomeworkFinishde;

}

void CheckHomework(){//请家长来检查作业

mParents.check(this.isMyHomeworkFinishde);

}

@Override

public void playGame() {

System.out.println("可以打游戏了!");

}

@Override

public void doHomework() {

System.out.println("继续写作业!");

}

}

建立Parents.class来实现检查作业的方法check(),并根据情况回调学生的玩游戏或者继续写作业方法

public class Parents {//家长 来判断学生该做什么

InterfaceStudent mStudent;//先通过接口建立家长对应的学生对象

Parents(Student mStudent){//绑定家长和学生

this.mStudent=mStudent;

}

//检查学生的作业 看看是否完成 并对学生作出相应指示

public void check(boolean isMyHomeworkFinishde){

if (isMyHomeworkFinishde){

mStudent.playGame();

}

else{

mStudent.doHomework();

}

};

}

最后就是Test类啦:

public class Test {

public static void main(String[] args){

//A同学作业没有完成让家长检查

Student studentA=new Student();

studentA.setMyHomeworkFinishde(false);

studentA.CheckHomework();

//B同学作业完成让家长检查

Student studentB=new Student();

studentB.setMyHomeworkFinishde(true);

studentB.CheckHomework();

}

}

运行结果就这样的啦:

继续写作业!

可以打游戏了!

Process finished with exit code 0

以上就是比较好理解的“接口回调”了

看到这里,有些同学可能要问了:这不坑爹吗!这个InterfaceStudent接口起个毛用呀!我直接在Parents里边声明Student对象 构造函数传入学生对象不就好了吗?如下:

//这种方式也是可行的 但不推荐 因为请家长检查作业的不一定是学生

//比如我家的dog也实现了InterfaceStudent接口 请家长检查作业呢 对吧

//android开发中 activity和fragment有时候会共用一个presenter

public class Parents {//家长 来判断学生该做什么

private Student mStudent;

Parents(Student mStudent){

this.mStudent=mStudent;

}}

暴躁老哥稍安勿躁,以上例子其实是个非常简单的示范,但至少还是是实现了回调这个机制呀。在以上做法中,加入接口反而让代码显得多余。但其实再大型项目中,这个接口的存在非常重要,因为项目中有多个家长和多个学生,我们需要这个接口来统一规定学生和父母能做的事情,方便管理。(瞎机吧扯,这样做的原因除了满足一些特殊需求外,主要还是为了解耦)

那么接下来我们可以稍微扩展一下:

如果我们在原本的基础上增加一个要求:学生在等待家长检查作业的时候,可以先去吃饭,那么是不是就需要开一个线程,这个线程中家长去检查作业,学生自己去做自己的事情,家长检查完毕再作出反馈。这种方式叫做异步回调。

很简单,只需要在学生请家长检查作业的方法中加入一个线程就可以了:

void CheckHomework(){//请家长来检查作业

//异步请求

new Thread(new Runnable() {

@Override

public void run() {

mParents.check(isMyHomeworkFinishde);

}

}).start();

this.doOther();

}

public void doOther(){

System.out.println("我先去扫地啦!");

}

运行结果:

我先去扫地啦!

我先去扫地啦!

继续写作业!

可以打游戏了!

Process finished with exit code 0

总结一下,以上的接口回调其实不规范

1.应该在main中建立parents对象,然后通过student构造函数赋值,我直接在构造函数中new了

2.parents传入Student对象应该在check中添加Student形参,然后再赋值,或者单独给一个方法给student赋值

因为parent也会有单独的属性事情要设置等待

以上都是代码规范的问题,以后多多注意!

在android的开发中MVP架构大量使用了接口回调,并且封装的很好,要习惯这种解耦方式。

最后

以上就是敏感云朵为你收集整理的Java中如何实现接口回调_JAVA接口回调原理简单实现的全部内容,希望文章能够帮你解决Java中如何实现接口回调_JAVA接口回调原理简单实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部