java中回调

不管在java中还是android中回调都用的很多,比如自定义listview 下拉刷新,listview这个类并不知道下拉中要去实现什么功能,而只知道当用户下拉要刷新,这不就是接口的作用么,接口只定义外观,具体的实现要子类去实现,这是其一,其二,listview既然不知道下拉刷新的功能是什么,还要等调用他的类去实现,因此就要用到回调,

回调的定义:

用我个人理解的话:就是某个功能,在中间某段并不知道要实现什么,要等外部调用者调用时才知道,而在某个功能中只知道要实现什么功能,但是具体的实现确实在调用类中实现,这就是接口回调,现在用代码来解释更明白

首先定义一个接口,用于回调的

/**
 * 用于回调的接口
 */
public interface OnClickListener {
	void onClick();
}

在定义一个Button,用于实现某些功能,

public class Button {
	private OnClickListener listener;
	private MyInterface interfacer;
	public void setOnClickListener(final OnClickListener listener) {
		this.listener = listener;
	}
}

这是模拟android中button的点击事件,

MainClass.java

public class MainClass implements OnClickListener  {
     public static void main(String[] args) {
    	 System.out.println("this is main");
    	 new MainClass().callBack();
	}

     public void callBack(){
    	 Button btn = new Button();
    	 btn.setOnClickListener(this);
     }

	@Override
	public void onClick() {
			System.out.println("接口回调");
	}
}

打印结果:

this is main
接口回调

现在分析回调,

1:首先定义一个接口,用于回调,

2:在要被调用的类中,在这个代码中Button就是要调用的类,在这个类中setOnClickListener()方法并没有实现任何代码,只是调用了接口中的OnClick()方法,相当于声明方法体,并没有具体的实现,而在MainClass类中我们发现OnClick()方法中打印了一句话System.out.println("接口回调");这可以看做是onClick()方法具体的实现,所以说回调的方法是 声明和实现分离的,

3:注册监听器:public void setOnClickListener(OnClickListener listener) ;这个方法就是注册监听器,然后定义变量接受外部传递过来的接口变量,在外部传递过来的是接口的实现类,这里就用到了多态的概念了,

4:在Button类中定义一个方法实现某一逻辑,但是这个逻辑也是某个部分不知道怎么实现,

代码部分改动:

Button.java

public class Button {
	private OnClickListener listener;
	public void setOnClickListener(OnClickListener listener) {
		this.listener = listener;
	}

	public void move(){
		System.out.println("移动前------");
		listener.onClick();//比如移动中要处理很多业务
		System.out.println("移动后------");
	}
}

MainClass.java

public class MainClass implements OnClickListener  {
     public static void main(String[] args) {
    	 new MainClass().callBack();
	}
     public void callBack(){
    	 Button btn = new Button();
    	 btn.setOnClickListener(this);
    	 btn.move();
     }
	@Override
	public void onClick() {
			System.out.println("移动中................");
	}
}

调用类要做的事:

1:new 一个被调用类的对象

2:然后注册监听器

具体的代码提现在:

 Button btn = new Button();
 btn.setOnClickListener(this);

被调用类还有一种写法:
Button.java<pre class="java" name="code">public class Button {
	public void setOnClickListener(OnClickListener listener) {
		System.out.println("移动前------");
		listener.onClick();//比如移动中要处理很多业务
		System.out.println("移动后------");
	}
}

调用者也有一个写法:

public class MainClass  {
     public static void main(String[] args) {
    	 new MainClass().callBack();
	}
     public void callBack(){
    	 Button btn = new Button();
    	 btn.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick() {
				System.out.println("移动中................");
			}
		});
     }
}

大家可以对比android中一些view的点击事件来看,就是这样的,理解接口对学设计模块有很大的帮助!希望大家一起好好学习,有什么地方讲的不对,请回复!



时间: 2024-08-11 02:07:24

java中回调的相关文章

java中回调函数的理解

不要忽律学习中的一点点细节,也许他会决定你的成败. 这是在c/c++中的定义: 回调函数就是一个通过函数指针(函数地址)调用的函数.如果把函数的指针(也即函数的地址)作为参数传递给另一个函数,当通过这个指针调用它所指向的函数时,称为函数的回调. 回调函数不是由该函数的实现方直接调用的,而是在特定的事件或条件发生时,由另外的一方调用的,用于对该事件或条件进行响应. 软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类: 同步调用.回调和异步调用. 同步调用是一种阻塞式调用,调用方要等

java中回调函数的使用

package com.huawei.common; import java.sql.ResultSet;import java.sql.SQLException; /** * 回调函数 * @author Administrator * */public interface CallBack { void execute(ResultSet rs) throws SQLException; } package com.huawei.dao; import java.sql.Connection

java中的回调机制的理解(小例子)

这样的解释似乎还是比较难懂,这里举个简单的例子,程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序.程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法.目的达到.在C/C++中,要用回调函数,被掉函数需要告诉调用者自己的指针地址,但在JAVA中没有指针,怎么办?我们可以通过接口(interface)来实现定义回调函数. 正常情况下开发人员使用已经定义好的API,这个过程叫Call.但是有时这样不能满足需求,就需要程序员注册自己的程序,然后让

Java中的接口回调

接口回调是多态的另一种体现.接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法.当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调.不同的类在使用同一接口时,可能具有不同的功能体现.即接口的方法体不必相同,因此接口回调可能产生不同的行为. 接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理. 现在有两个类,一个是A,一个是B,回调就是A去调用B中的某个方法,然后B又回调A中

【ThinkingInJava】18、 关于java中的闭包与回调

/** * 书本:<Thinking In Java> * 功能:关于java中的闭包与回调,这里回调区别于C++,C++中回调的话寄托于指针 * 文件:Callbacks.java * 时间:2015年4月3日20:26:43 * 作者:cutter_point */ package Lession10innerclasses; import static net.mindview.util.Print.*; //创建一个接口,包含一个函数 interface Incrementable {

Java中的内部类(回调)

一.内部类的主要作用如下: 1. 内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类 2. 内部类的方法可以直接访问外部类的所有数据,包括私有的数据 3. 内部类所实现的功能使用外部类同样可以实现,只是有时使用内部类更方便. 二.内部类可分为以下几种: 成员内部类 静态内部类 方法内部类 匿名内部类. 三.1,定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去 new 一个内部类对象,即:内部类 对象名 = 外部类对象.new 内部类( );

Java中的回调函数学习

Java中的回调函数学习 博客分类: J2SE JavaJ# 一般来说分为以下几步: 声明回调函数的统一接口interface A,包含方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形参传入caller的XXX): caller的某个方法dosth()中会用到XXX.callback()方法; 在caller的实例中,先实现A接口,后调用dosth()方法: 网上流行

Java中的回调函数学习-深入浅出

Java中的回调函数一般来说分为下面几步: 声明回调函数的统一接口interface A.包括方法callback(); 在调用类caller内将该接口设置为私有成员private A XXX; 在caller内提供实现A接口的public方法(将外部该接口的实现类通过形參传入caller的XXX): caller的某个方法dosth()中会用到XXX.callback()方法; 在caller的实例中,先实现A接口.后调用dosth()方法: 样例: Java代码   //回调函数接口及方法

c++与java中的回调函数

首先,说明一下,因为java中没有指针的概念,所以java与c++中回调函数虽然原理差不多,但是实现方法不同. 说实话,如果c++是简单暴力直接的话,java更像一个小姑娘扭扭捏捏,本人也是过了很多次才了解到这个用法.... 1.c++ c++中的简单极了,只要将要调用的函数地址传给函数指针即可,简单明了.如下 #include <iostream> using namespace std; void pig() { cout << "猪在叫叫叫!!" <