java - 侦听器接口如何或为什么工作?除了作为侦听器之外,接口还有其他用途吗?
问题描述
每当我们想创建一个监听器时,我们都会实现一个监听器接口。例如,让我们实现SensorEventListener
.
现在我们必须重写这个监听器接口的方法。
public void onSensorChanged(SensorEvent event);
和
public void onAccuracyChanged(Sensor sensor, int accuracy);
我不明白的是:
- 当我自动使用这些方法时,它们为什么以及如何工作?
- 为什么
onAccuracyChanged
在精度发生变化时会调用方法? - 毕竟,
onAccuracyChanged
它只是一个我们重写的空方法,因为我们的公式(或我们实现的接口)要求我们这样做。如果是低层造成的魔法 - 何时以及为什么有人会在他/她的自我项目中实际使用界面,而不管 android 是什么?
解决方案
这是一个合适的答案。请允许我举一个关于听众的例子。
听众:
假设有一个在后台获取数据的类Worker
, 和另一个对该数据感兴趣的类,InterestedClass
。
public class Worker extends Thread{
interface DataFetchedListener{
void onDataFetched(String data);
}
private DataFetchedListener listener;
@Override
public void run(){
String data = fetchData();
// Data fetched inform your listener so he can take action
listener.onDataFetched(data);
}
public void setDataFetchedListener(DataFetchedListener listener){
this.listener = listener;
}
private String fetchData(){
// returns the fetched data after some operations
return "Data";
}
}
public class InterestedClass implements Worker.DatafetchedListener{
@Override
public void onDataFetched(String data){
doSomethingWith(data);
}
private doSomethingWith(String data){
// just print it in the console
System.out.println("Data fetched is -> " + data);
}
}
不关心哪个类将操作其数据,Worker
只要该类遵循.DataFetchedListener
同样,这意味着任何类都可以对数据做一些事情(InterestedClass
只是在控制台中打印它),但Worker
不需要知道是哪个类,只需要它实现它的接口即可。
主线可以这样...
public class Application{
public static void main(String[] args){
InterestedClass interested = new InterestedClass();
Worker worker = new Worker();
worker.setDataFetchedListener(intereseted);
worker.start(); // Starts Worker's thread
}
}
当Worker
将获取数据时,它将通知其侦听器(当前为interested
对象),侦听器将采取相应的行动(interested
将数据打印到控制台)。
推荐阅读
- lazy-loading - IntersectionObserver,立即加载图像而不是延迟加载
- ssis - ETL派生列问题
- yosys - 如何获得编号的内部线名 dump_module Yosys
- orocommerce - OroCommerce Storefront json 登录问题
- javascript - Node.js - 在 Express.js 中使用 for 循环来实现多语言/区域支持
- python - Streamlit 中的清晰图像
- python - 在完美任务“批处理”中使用迭代器
- spring-boot - 带下束的弹簧靴
- python - 运行包含通过任务计划程序发送电子邮件触发器的 python 导出不起作用?
- wordpress - What is the difference between a wordpress.com account and a wp-admin account?