java - 监听器接口(interface)如何或为何工作?除了作为监听器之外,接口(interface)还有其他用途吗?

标签 java android listener implements

每当我们想要创建一个监听器时,我们都会实现一个监听器接口(interface)。例如,让我们实现SensorEventListener。

现在我们必须重写此监听器接口(interface)的方法。

public void onSensorChanged(SensorEvent event);

public void onAccuracyChanged(传感器传感器,int 精度);

我不明白的是:

  1. 当我自动使用这些方法时,它们为何以及如何发挥作用?
  2. 为什么精度发生变化时会调用 onAccuracyChanged 方法?
  3. 毕竟,onAccuracyChanged 只是一个我们重写的空方法,因为我们的公式(或我们实现的接口(interface))要求我们这样做。如果是低层造成的魔法
  4. 某人何时以及为什么会真正使用他/她的界面 无论 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/

相关文章:

java - 如何将字符串打印到系统控制台?

java - 如何在 do while 循环中初始化变量而不传递值直到循环关闭?

android - 如果我将所有图像都留在 drawable-hdpi 文件夹中会怎样?

android - 如何防止服务在完成工作之前被销毁

java - 如何在JAVA中添加鼠标监听器?

Java(Swing)监听按键事件

java - 无法使用 web3j 下载以太坊 Activity

java - 无法获取AsyncTask的结果

java - Android:在加载内容时运行动画

ruby - 在 Ruby 中编写文件更改监听器