Java 接口回调机制 的理解

it2024-04-04  64

文章目录

Java 接口回调机制的理解1 Android View.OnClickListener接口源码解读2 普通Java项目演示

Java 接口回调机制的理解

1 Android View.OnClickListener接口源码解读

接口可以声明在任意包下的任意地方,符合语法就可以,点击事件监听接口声明在View类内部  接口声明在哪里不重要,没影响

public class View implements Drawable.Callback, KeyEvent.Callback, AccessibilityEventSource { public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View v); } }

在被监听的对象(类)内部提供接口对象作为其属性   给触发监听事件的对象提供接口对象属性,方面后面执行接口的方法,在这个方法传入实际参数。

public OnClickListener mOnClickListener; public void setOnClickListener(@Nullable OnClickListener l) { if (!isClickable()) { setClickable(true); } getListenerInfo().mOnClickListener = l; }

在需要接口回调的类执行setOnClickListener(OnClickListener onClickListener){}   需要回调接口的地方设置监听 或者实现接口

public abstract class BaseActivity extends AppCompatActivity implements OnClickListener {} public class RegisterActivity extends BaseActivity { // 接口的回调方法 public void onClick(View v) { } }

2 普通Java项目演示

接口声明  声明在Test类下

package com.richard.learn; public class Test { // 接口声明 public interface TestListener{ void getNumber(int number); } }

在被监听对象能访问到的地方提供接口对象属性,并设置set方法  MakeNumber 是被监听的对象(触发监听事件的对象),由这个对象提供接口中方法形参的实际参数。

package com.richard.learn; public class MakeNumber { // 待传入接口方法的数据来源 实际编程获取接口方法形参对应的实参没这么简单 int number = 20; Test.TestListener testListener; public void setTestListener(Test.TestListener testListener) { if (testListener!=null){ // 如果接口对象不是null 把参数传入接口中的方法 testListener.getNumber(number); } } }

回调方法的使用  ShowNumber 类作为回调方法的使用类(哪个类使用原理一样):提供监听对象(作用:调用接口中的方法,也就是setTestListener()),提供监听接口对象实例(可以是接口实现类或接口实现类的子类或者直接new 一个匿名内部类),重写接口的方法(回调的目的就是为了获取接口中方法的参数,从而做点别的事)

package com.richard.learn; public class ShowNumber implements Test.TestListener { /** * 接口回调方法 * @param number */ @Override public void getNumber(int number) { System.out.println(20); } public static void main(String[] args) { new MakeNumber().setTestListener(new ShowNumber()); } }

运行结果

最新回复(0)