![](/img/trans.png)
[英]How do I define a method which takes a lambda as a parameter in Java 8?
[英]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.