每当我们想要创建一个监听器时,我们都会实现一个监听器接口(interface)。例如,让我们实现SensorEventListener。
现在我们必须重写此监听器接口(interface)的方法。
public void onSensorChanged(SensorEvent event);
和
public void onAccuracyChanged(传感器传感器,int 精度);
我不明白的是:
- 当我自动使用这些方法时,它们为何以及如何发挥作用?
- 为什么精度发生变化时会调用
onAccuracyChanged
方法? - 毕竟,
onAccuracyChanged
只是一个我们重写的空方法,因为我们的公式(或我们实现的接口(interface))要求我们这样做。如果是低层造成的魔法 - 某人何时以及为什么会真正使用他/她的界面 无论 Android 系统如何,都可以进行 self 项目?
最佳答案
这是一个suitable answer 。请允许我给你举一个关于听众的例子。
听众:
假设有一个在后台获取数据的类,即 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
却可以不需要知道哪个类,只需知道它实现了它的接口(interface)。
主要内容可以这样......
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
获取数据时,它将通知其监听器(当前感兴趣
对象),并且监听器将采取相应行动(感兴趣
> 将把数据打印到控制台)。
关于java - 监听器接口(interface)如何或为何工作?除了作为监听器之外,接口(interface)还有其他用途吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53572083/