Java的接口调用

最近在观看一个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方法,然后返回参数。

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

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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值