‘壹’ java回调函数
应该是有一个函数式接口Phone,它有唯一一个方法call(),消费者类实现这个接口Phone,商店老板类的对象中保存一个List<Phone>,当中存放每个来买过热狗的实现了Phone方法的对象;每当一个热狗做好时,取出列表中第一个对象,调用它的call()方法通知它热狗已做好。
‘贰’ JAVA里面方法回调是什么意思
注明:此答案为转载,出处:网络知道
====================================
比如你写了两个类A和B,并且各生成一个对应的实例a 和b ,在a 中有一个方法fa( 此方法只负责生成两个随机数)要调用b中的一个方法fb(此方法对两个数进行求各) 来进行求和,fb求得结果后要调用a的另一个方法ffa(此方法用于显示求得的结果),这时ffa就叫作回调函数,(反回来调用一下的意思)
为什么要这么麻烦呢,如果fb直接返回结果不好吗,试想如果fb执行时间较长,那么fa就会一直等结果而导致fa不往下执行了,此时如果用回调这个功能实现,由于 回调函数一般是由系统异步调用的,方法fa调用fb后就不用等而直接往下执行,比如可以再生成两随机数给fb,fb会依次得到结果后通过回调机制来调用ffa显示出来,其实就是为实现生成随机数和计算随机数的异步执行。好象fa和fb是两个独立执行的线程,提高程序效率。
异步调用是回调函数的一种典型应用
正是因为回调函数大多数情况下(98%的比例)最常用于异步的多线程程序中,所以大家经常认为只要用到回调函数了则程序就是异步的.这个理解不对
fa ,fb方法分别运行于两个线程中才能实现异步工作,因为回调函数只是实现异步调用的手段, 线程间通信(比如要进行线程间同步)时程序员常通过在一个线程中引发事件来通知另一线程响应,而引发事件其实就是一种调用回调函数的过程.由此可以理解VB的事件编程模式下我们写的那些按钮点击事件中的代码其实就是回调函数的实现代码
‘叁’ java中的接口的回调
接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。看下面示例。
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.
‘肆’ java怎么实现c的回调函数
以我的理解恐怕这个CALLBACK要让你失望了~~JAVA的操作机制是隐藏了指针和引用,地址的操作在JAVA里面是不允许的~~所以JNI接口中定义的方法,不能使用函数指针作为形参,所以这个回调函数在JAVA的CLASS中是不能调用的;
你换个思考角度用TCP/UDP程序吧,JAVA的CLASS调用的结果通过流传递给C/C++的Server。。。貌似我只能想到这样了。
望采纳!!
‘伍’ Java中什么是接口回调
可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。
实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
Java语言特点
Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。
例如,Java不支持go to语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。
‘陆’ 给个Java接口回调的例子
接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
示例代码:
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.
‘柒’ JAVA如何实现异步回调
FutureTask<String> futureTask=new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
// TODO Auto-generated method stub
return "回调完成";
}
});
try {
String str=futureTask.get();
if(str.equals("回调完成"))
System.out.println("异步任务完成!");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace(); }
‘捌’ java中怎样定义回调函数
程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。目的达到。在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数。
假设我是程序员A,以下是我的程序a:
[java] view plainprint?
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();
}
}
‘玖’ java 如何写回调方法
publicclassCaller
{
publicMyCallInterfacemc;
publicvoidsetCallfuc(MyCallInterfacemc)
{
this.mc=mc;
}
publicvoidcall(){
this.mc.method();
}
}
接口
{
publicvoidmethod();
}
测试
{
publicvoidmethod()
{
System.out.println("回调");
}
publicstaticvoidmain(Stringargs[])
{
Callercall=newCaller();
call.setCallfuc(newB());
call.call();
}
}