Как использовать ссылку на метод в качестве будущего обратного вызова?

Вы можете использовать df.index для доступа к объекту индекса, а затем получить значения в списке, используя df.index.tolist().

0
задан Hivemaster 17 January 2019 в 06:04
поделиться

2 ответа

Вы можете разыграть ссылку на метод

asyncMethod().addListener((GenericFutureListener<Future<String>>) Example::callback);

Это менее многословно, но все же не идеально. Чтобы немного улучшить это решение, вы можете переместить определение длинного типа в функциональный интерфейс

class Example {
    @FunctionalInterface
    private interface Callback extends GenericFutureListener<Future<String>> {
        void operationComplete(Future<String> future) throws Exception;
    }

    private static void callback(Future<String> future) {
        System.out.println(future.getNow());
    }

    public static void main(String[] args) {
        asyncMethod().addListener((Callback) Example::callback);
    }
}

Или вы можете заключить обратный вызов в лямбда с типизированным аргументом

asyncMethod().addListener((Future<String> f) -> callback(f));

Может быть, это можно сделать лучше, ИДК.

0
ответ дан Sergey Gornostaev 17 January 2019 в 06:04
поделиться

У вас есть следующие варианты:

  1. использовать лямбду (короче, чем полный анонимный класс, но все же не оптимально):
[1110 ] asyncMethod().addListener((GenericFutureListener<Future<String>>) future -> Application.callback(future))

  1. Исправьте параметр вашего обратного вызова :

private static void callback(Future<? super String> future) {

из простого Future<String> future Таким образом, вы также можете использовать обратный вызов.

Примечание. Если вы запутались в проблеме ? extends vs ? super обобщения, у меня эта публикация SO добавлена ​​в закладки по той же причине.

0
ответ дан Gergely Bacso 17 January 2019 в 06:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: