Я пытаюсь создать действительно простой обратный вызов с использованием некоторых строк. Смысл кода IDE в том, что он просто стонет о непроверенном вызове. Может ли кто-нибудь дать мне исправить это? Идея в конце концов заключается в том, чтобы обернуть сетевой вызов, чтобы вернуть обещанный результат, и я могу прибегнуть к дополнительным функциям по мере необходимости.Обратный звонок с CompletableFuture
import java.util.concurrent.*;
import java.util.function.BiConsumer;
import java.util.function.Function;
import java.util.function.Supplier;
public class FuturesTest {
public static void main(String[] args) throws Exception {
new FuturesTest().go();
}
private void go() throws ExecutionException, InterruptedException {
CompletableFuture.supplyAsync(new MakesANetworkCall())
.whenComplete(new BiConsumer<String, String>() {
@Override
public void accept(String result, String s) {
System.out.println(result.toString());
}
})
.exceptionally(new Function<Exception, Exception>() {
@Override
public Exception apply(Exception e) {
e.printStackTrace();
return e;
}
}
).thenApplyAsync(new Function<String, String>() {
@Override
public String apply(String o) {
System.out.println("Last action of all!");
return null;
}
});
System.out.println("Main thread will sleep");
Thread.sleep(2500);
System.out.println("Program over");
}
class MakesANetworkCall implements Supplier {
@Override
public String get() {
try {
System.out.println("Ground control to Major Tom");
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
// int i = 2/0;
return new String("Major Tom reporting!");
}
}
}
Почему вы используете 'нового CompletableFuture() .supplyAsync' для вызова' static' метода? И почему вы не используете лямбда-выражения? –
Holger
Что вы хотите, чтобы вызов 'exclusively()' выполнялся? – thecoop
* Редактировать * изменено на статичное, спасибо, что указали это, Хольгер. –