簡體   English   中英

我應該如何在我的方法的 arguments 中定義 lambda?

[英]How should I define a lambda in my method's arguments?

Ι 有以下自定義Runnable:

class RandomSum extends Runnable {

   public void run() {
     float sum - 0;
     for(int i = 0; i<1000000;i++){
       sum+=Math.random();
     } 
   }
}

我想這樣運行它:


  RandomSum s =new RandomSum();
  s.retrieveCallback((sum)->{
    System.out.println(sum);
  });
  Thread thread = new Thread();
  thread.start();

但我不知道我應該如何在接受 lambda 的 RandomSum 中定義方法retrieveCallback

您展示的 lambda 的一種可能目標類型Consumer 定義一個接受Consumer<Float>的方法setCallback並將其存儲為實例變量。 然后在for循環之后調用它。

class RandomSum implements Runnable {
    Consumer<Float> callback;
   
    public void setCallback(Consumer<Float> callback) {
        this.callback = callback;
    }

    public void run() {
        float sum = 0;
        for(int i = 0; i<1000000;i++){
            sum += Math.random();
        } 
        callback.accept(sum);
    } 
}

主叫方

RandomSum s =new RandomSum();
s.setCallback((sum)->{
    System.out.println(sum);
});

或者使用方法引用,

s.setCallback(System.out::println);

最好您可以在構造函數中傳遞回調。

您可以在RandomSum中定義retrieveCallback ,如下所示:

public void retrieveCallback(FeedbackHandler feedbackHandler) {
    int sum = ...; // Get the value however you like.
    feedbackHandler.handleFeedback(sum);
}

然后將這個FeedbackHandler接口定義為:

public interface FeedbackHandler {
    void handleFeedback(int sum);
}

基本上,當您將 lambda (sum) -> {...}傳遞給retrieveCallback時會發生什么:

retrieveCallback(new FeedbackHandler() {
    @Override
    public void handleFeedback(int sum) {
        ...
    }
});

暫無
暫無

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

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