Java编程接口回调一般用法代码解析
作者:mengwei 发布时间:2023-11-11 06:55:11
接口回调是指:可以把使用某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法。实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调。
Java接口回调一般用法:实现接口实际上和继承抽象类类似,只不过继承是在类的层面上操作,接口是在方法和常量集合的层面上操作,接口比抽象类更抽象、更简洁。可以把实现接口看成继承特定的一个或多个方法以及一些常量,关于接口的具体规则这里不赘述。
为什么要使用接口和抽象类?因为从很多角度讲,这样做符合面向对象的设计思想,比如开闭原则等。
从实际开发的角度讲,Java不支持多继承,为了弥补这一点,接口的存在就极为重要,和继承不同,一个类可以实现多个接口。
接口的一大作用是实现回调,回调分同步回调和异步回调,区别是异步回调使用了多线程技术,当回调中有耗时操作时,就需要使用异步回调。
以下全部以异步回调为例。以下以java写法为例,android同理。
1、一般用法
新建入口类 Main,并新建接口 InterfaceExample
public class Main implements InterfaceExample{
public static void main(String[] args) {
System.out.println("------接口使用测试--------");
InterfaceTest test = new InterfaceTest();
//调用InterfaceTest的handleThings方法,并传递Main的实例
test.handleThings(new Main());
System.out.println("------异步回调测试--------");
}
@Override //重写接口方法
public void sendMessage(String string) {
System.out.println("接口回调成功,利用 " + string + " 做一些事");
}
}
//接口也可以写在一个独立的.java文件里
interface InterfaceExample {
void sendMessage(String string);
}
下面新建发起回调的类InterfaceTest
public class InterfaceTest {
//注意这里Main实例向上转型,接口变量引用了Main实例
public void handleThings(InterfaceExample example) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("-----做一些事------");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//回调接口方法
example.sendMessage("接口传的参数");
}
}).start();
}
}
最后运行输出:
------接口使用测试--------
------异步回调测试--------
-----做一些事------
接口回调成功,利用 接口传的参数 做一些事
其中异步的处理也可以在Main中调用handleThings时进行。
2、结合匿名内部类实现接口回调
第二种方法只需要在第一种的基础上修改Main类就可以
public class Main {
public static void main(String[] args) {
System.out.println("------接口使用测试--------");
InterfaceTest test = new InterfaceTest();
//调用InterfaceTest的handleThings方法,并使用实现了InterfaceExample接口的匿名内部类
//在该匿名内部类中重写接口方法
test.handleThings(new InterfaceExample() {
@Override //重写接口方法
public void sendMessage(String string) {
System.out.println("接口回调成功,利用 " + string + " 做一些事");
}
});
System.out.println("------异步回调测试--------");
}
}
interface InterfaceExample {
void sendMessage(String string);
}
可以看到,采用匿名内部类的方式可以简化代码,使程序结构更清晰。所以这种用法很常见,比如android系统提供的view的点击事件就是采用这种形式进行回调。
输出是一样的:
------接口使用测试--------
------异步回调测试--------
-----做一些事------
接口回调成功,利用 接口传的参数 做一些事。
本文关于Java编程接口回调一般用法的介绍就到这里,希望对大家有所帮助。
来源:https://www.2cto.com/kf/201704/620057.html


猜你喜欢
- 先给大家展示下效果图:1、验证码生成类:import java.util.Random;import java.awt.imag
- 前言尽管可以通过不同的方式组合IO流类,但我们可能也就只用到其中的几种组合。下面的例子可以作为典型的IO用法的基本参考。在这些示例中,异常处
- 前言xxljob 是采用 java 开发的开源的任务调度系统,架构上分为调度管理器、执行器,目前除了官方提供的 java 执行器外,也有 g
- JPA双向多对多关联关系@ManyToManypackage com.jpa.helloworld; import java.util.Ha
- 适合人群学完Java基础想通过Java快速构建web应用程序想学习或了解SpringBoot背景本节给大家讲讲 Java的Spri
- spring中事务处理原理 利用aop生成代理对象执行带有Transactional事务注解的
- 前言出去面试的时候,对java的集合框架考察的知识点还是蛮多的。除了基础的集合常见API使用,对集合底层的实现原理以及数据结构等也有很多考察
- 1. 概述官方JavaDocsApi: javax.swing.JTextAreaJTextArea,文本区域。JTextArea 用来编辑
- 本文实例讲述了C++语言实现线性表之链表实现方法。分享给大家供大家参考。具体分析如下:插入、删除结点的代码有点多,但这样提高了代码的可读性,
- 安装容易出现的问题以及解决方法:1、更新sdk时可能无法连接服务器,可在C:\WINDOWS\system32\drivers\etc下的h
- 一:CountdownEvent这种采用信号状态的同步基元非常适合在动态的fork,join的场景,它采用“信号计数&a
- 老风格,废话不多说了,直接给大家贴java代码了。代码如下:package com.zzw.getPhoneInfos;import and
- 1.挂起函数挂起函数在Kotlin协程中是一个比较重要的知识点,协程的非阻塞式、Channel、Flow等API都对它有充分的理解才能在学习
- C#删除只读文件的方法: if (File.GetAttributes(FFName).ToString().IndexOf("R
- 本文实例讲述了C#调用SQLite的方法。分享给大家供大家参考。具体分析如下:一、SQLite简介:当我们用到海量数据时一般会用Oracle
- ArrayList简介:ArrayList实现了List接口它是一个可调整大小的数组可以用来存放各种形式的数据。并提供了包括CRUD在内的多
- 一、Rxjava使用场景为了模拟实际场景,从wanandroid网站找了二个接口,如下:(对Wanandroid表示感谢!)public i
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:package com.example.yanlei.yl4;import androi
- Stripe支付首页需要引用Stripe.net框架,我引用的是22.8.0版本,注意.NETFramework的版本为4.5,同时需要引用
- 一、连接数据库的配置单独放在一个properties文件中之前,我们是直接将数据库的连接配置信息写在了MyBatis的conf.xml文件中