簡體   English   中英

如何在java中創建自定義偵聽器?

[英]How to create custom Listeners in java?

我想知道如何在 java 中設置我們自己的監聽器。例如,我有一個將數字從 1 遞增到 100 的函數。我想在值達到 50 時設置一個監聽器。我該怎么做? 請建議我任何教程。

https://stackoverflow.com/a/6270150/3675925

您可能想研究觀察者模式

以下是一些示例代碼,可幫助您入門:

import java.util.*;

// An interface to be implemented by everyone interested in "Hello" events
interface HelloListener {
    void someoneSaidHello();
}

// Someone who says "Hello"
class Initiater {
    private List<HelloListener> listeners = new ArrayList<HelloListener>();

    public void addListener(HelloListener toAdd) {
        listeners.add(toAdd);
    }

    public void sayHello() {
        System.out.println("Hello!!");

        // Notify everybody that may be interested.
        for (HelloListener hl : listeners)
            hl.someoneSaidHello();
    }
}

// Someone interested in "Hello" events
class Responder implements HelloListener {
    @Override
    public void someoneSaidHello() {
        System.out.println("Hello there...");
    }
}

class Test {
    public static void main(String[] args) {
        Initiater initiater = new Initiater();
        Responder responder = new Responder();

        initiater.addListener(responder);

        initiater.sayHello();  // Prints "Hello!!!" and "Hello there..."
    }
}

查看使用偵聽器的任何類的來源。 其實很簡單:

  • 為您的偵聽器創建一個接口,例如MyListener
  • 維護一個MyListener列表
  • 在偵聽器應該偵聽的每個事件上,遍歷列表並使用一些事件參數調用適當的方法

至於觀察者模式以及一些 Java 代碼,請查看wikipedia

您可以使用Signals庫。 它看起來像這樣:

interface FiftySignal{
    void on50();
}

class FiftyMaker{
    FiftySignal fiftySignal = Signals.signal(FiftySignal.class).dispatcher;

    void doIt(){
        for(int i = 0; i < 100; i++){
            if(i == 50){
                fiftySignal.on50(); // dispatching the event
            }
        }   
    }
}

class Boo{
    Signal<FiftySignal> fiftySignal = Signals.signal(FiftySignal.class);


    void bar(){
         fiftySignal.addListener(()-> System.out.println("It's 50!")); // listener
    }
}

免責聲明:我是信號的作者。

沒有內置機制可以讓您將偵聽器附加到所有變量。 您要觀看的對象需要自己提供支持。 例如,它可以變為 Observable 並向其 Observers 觸發 onChange 事件(您還必須確保被跟蹤)。

我建議在您的用例中使用EventBus 它有一個很好的 API 設計並且易於使用。 看看他們的入門部分,看看它是如何工作的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM