Java的接口调用

2023-05-16

最近在观看一个Android开发中,有一个问题百思不得其解,就是从Fragment传数据回Activity和Activity传数据到Fragment中,bundle其实刚开始还是理解的,但是当老师讲解到Java中的接口回调也可以使数据传回。
当时就觉得,Java的基础掌握的还是不牢固,然后这几天看了好多例子,但是就是看这些例子的时候,每当快看懂的时候,又写了一个例子又看不懂了。昨晚更是看到2点,就是每当快懂的时候就又陷入一个死循环。就在今天又重新看了那个老师讲的,突然就大彻大悟了,然后在eclipse中使用java的代码又重复写了一两次,感觉可能就是老师的这个讲的有点麻烦,我就觉得会不会用简单的方法讲出来呢,于是写了这个博客,只是一个java新手,希望大佬有更高明的可以再对我进行一些讲解,感谢。

废话不说了,开始。
我用java的可能更好理解,用的是老师的逻辑。看代码

package demo;

public interface Callback {
	//接口回调
	public void setToDemo(String s);
	public String getFromDemo();
}
package demo;

public class Caller {
	//有一个老哥说的一句话,对我感触也很大,就是,当回调时,使用调用者的方法
	
	//调用者
	public static void main(String[] args) {
		//创建一个被调用者对象
		BCaller bCaller=new BCaller();
		//在被调用者中,有了设置接口对象,那么我们需要将回调接口对象传递给被调用者,这样被调用者才能够调用接口,这个就是一个匿名内部类,是不是觉得很眼熟?Android中的button等等的触发其实都是回调接口。
		bCaller.setCall(new Callback() {
			//实现接口中的方法
			@Override
			public void setToDemo(String s) {
				System.out.print("2\n");
				System.out.print(s);	
			}	
			@Override
			public String getFromDemo() {
				System.out.print("4\n");
				return "hello Fragment\n";
			}
		});
		//使用被调用者中的方法
		//可以看作是,触发接口调用
		bCaller.run();
		bCaller.unrun();
	}
}
package demo;

public class BCaller {
	
	
	//被调用者
	//我们都知道接口和抽象都是不能实例化对象的,那么我们就在被调用类中,那么我们如何使用接口中的方法呢,就需要创建一个对象
	private Callback callback;
	
	public void setCall(Callback callback) {
	//将调用者传递过来的进行赋值,来实现接口调用
		this.callback=callback;
	}
	
	public void run() {
		System.out.print("1\n");
		callback.setToDemo("hello Demo\n");
	}
	public void unrun() {
		System.out.print("3\n");
		String s=callback.getFromDemo();
		System.out.print(s);
	}
}

我上面的注释仅仅只是我自己的一些见解,就是我是靠这么的想法来做到理解了接口回调,大佬勿喷。
当然仅仅只是看上面的注释可能是看不懂的,接下来我来给大家说明,他到底是怎么个运行步骤的。
我们记得那个老哥的话,当调用时,使用的是调用者重写的方法。
那么我们重写了两个方法,一个是void一个是String类。
运行时,bcaller.run(),是调用了被调用者的run方法,我们来看run方法中,有一个接口的方法,将“hello Demo”这个参数进行回调,按老哥说的,我们直接看调用者重写的接口方法setToDemo,是直接将传递过来的s输出,那么一定输出的就是“hello Demo”,我还写了过程的1,2就可以明确看到,在到被调用者的run方法后,直接回调到调用者的重写的setToDemo方法中。

bcaller.unrun()这个方法呢,跟上述一样的,到达被调用者的unrun方法,发现,将s赋值了一个接口调用结果,调用时,看调用者重写方法,我们再去调用者的方法中看,原来return了一个String类参数,那么此时s一定是被赋值了“hello,Fragment”,过程也是3,4,可以明确看出,在调用unrun方法后,直接回调到调用者的getFromDemo方法,然后返回参数。

那么我们来看输出结果,是否是我们想的那样呢?

过程确实如此呢,所以说,若是想快速了解并学会使用,那么就是在回调时,直接想到调用者重写的接口方法,如此运行。
当然以上的只是同步回调。
以上以上都是个人的基础见解,大佬勿喷,感谢!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java的接口调用 的相关文章

随机推荐

  • 【spring】说说spring的IOC与DI

    说说spring的IOC与DI 文章目录 说说spring的IOC与DIid属性和name属性标签scope Bean的作用范围Spring xff0c 配置生成Bean的三种方式Sping 的 Bean属性注入Sping的Bean属性通过
  • ffmpeg时间戳相关函数

    1 概述 ffmpeg中与时间戳相关的函数主要有 xff1a av rescale q xff0c av rescale q rnd xff0c av compare ts av rescale q span class token cla
  • 【计算机网络】网线规格的鉴别与接线方法

    网线规格的鉴别与接线发送 文章目录 网线规格的鉴别与接线发送一 怎么判断网线类型 xff1f 二 制作网线标准三 屏蔽类型四 使用场景五 米数标记接线方法 一 怎么判断网线类型 xff1f 可以根据网线外皮的标识来判断 xff0c 正规厂商
  • 【Java】说说spring-jdbc和spring事务管理

    文章目录 说说spring jdbc和spring事务管理spring jdbc1 配置数据源2 使用jdbcTemplete3 在dao层使用jdbcTemplete 外部配置方式新建配置文件jdbc properties修改数据源配置部
  • 【微服务】springcloud-dubbo,springCloudAlibaba服务调用使用dubbo

    springcloud dubbo xff0c springCloudAlibaba服务调用使用dubbo 文章目录 springcloud dubbo xff0c springCloudAlibaba服务调用使用dubbo添加依赖配置具体
  • 【项目实战】spring boot中使用webSocket

    spring boot中使用webSocket 文章目录 spring boot中使用webSocket引入依赖支持配置类接口类前端连接方式前端信息发送方式 引入依赖 需要在基础的spring boot web项目项目中添加下面一个依赖 x
  • 【项目复盘】springboot项目中使用mybatis-plus进行分页

    springboot项目中使用mybatis plus进行分页 文章目录 springboot项目中使用mybatis plus进行分页引入依赖配置类实体类持久层业务层 引入依赖 span class token generics span
  • 【项目复盘】javax.validation的简单使用

    javax validation的简单使用 javax validation需要与hibernate validator配合使用 validation bean 是基于JSR 303标准开发出来的 xff0c 使用注解方式实现 xff0c
  • 【项目复盘】springboot中使用swagger生成接口文档并配置bootstrap主题

    springboot中使用swagger生成接口文档并配置bootstrap主题 引入依赖 span class token generics span class token punctuation lt span dependency
  • 【项目复盘】微服务网关GateWay过滤

    微服务网管过滤 新建一个过滤类 span class token annotation punctuation 64 Component span span class token comment 过滤器的执行优先级 返回值越小 执行优先级
  • 【项目实战】Winodws下使用ELK搭建日志分析框架

    项目实战 Winodws下使用ELK搭建日志分析框架 ELK是什么 xff1a 引用官网的一句话 xff1a 核心产品包括 Elasticsearch Kibana Beats 和 Logstash xff08 也称为 ELK Stack
  • java_网络编程知识

    day11 网络编程 主要内容 软件架构CS xff0f BS网络通信三要素TCP通信Socket套接字ServerSocket 学习目标 能够辨别UDP和TCP协议特点 能够说出TCP协议下两个常用类名称 能够编写TCP协议下字符串数据传
  • AvFrame和AvPacket

    在FFmpeg中 未压缩的图像和压缩的视频码流分别使用AVFrame结构和AVPacket结构保存 针对视频编码器 其流程为从数据源获取图像格式的输入数据 保存为AVFrame对象并传入编码器 从编码器输出AVPacket结构 1 AVFr
  • 基于FreeRTOS的stm32程序初始化底层搭建(hal库)

    采用嵌入式实时操作系统 RTOS 可以更合理 更有效地利用CPU的资源 xff0c 简化应用软件的设计 xff0c 缩短系统开发时间 xff0c 更好地保证系统的实时性和可靠性 FreeRTOS是一个迷你的实时操作系统内核 作为一个轻量级的
  • ceres小结 -- vins为例

    从 typora 复制的 排版有问题 见谅 在estimator cpp文件里 这个函数 void Estimator optimization 1 声明problem ceres Problem problem 2 引入核函数loss f
  • JavaScript操作表格及CSS样式

    概述 在前端开发中 xff0c 表格主要用于存储结构化的数据 xff0c CSS主要用于修饰DOM元素 xff0c 如何通过DOM来操作表格及CSS呢 xff1f 本文主要通过一些简单的小例子 xff0c 简述DOM对表格和CSS的常见操作
  • 转:Git Submodule管理项目子模块

    使用场景 当项目越来越庞大之后 xff0c 不可避免的要拆分成多个子模块 xff0c 我们希望各个子模块有独立的版本管理 xff0c 并且由专门的人去维护 xff0c 这时候我们就要用到git的submodule功能 常用命令 span c
  • Linux/c++服务器开发方向的重点

    作者 xff1a NULL 链接 xff1a https www zhihu com question 37247264 answer 2352680534 来源 xff1a 知乎 著作权归作者所有 商业转载请联系作者获得授权 xff0c
  • Prometheus之Dockerfile编写、镜像构建、容器启动

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 目录 从官方镜
  • Java的接口调用

    最近在观看一个Android开发中 xff0c 有一个问题百思不得其解 xff0c 就是从Fragment传数据回Activity和Activity传数据到Fragment中 xff0c bundle其实刚开始还是理解的 xff0c 但是当