Невозможно найти Необходимый тип: BiConsumer

Я хочу перенести этот код Java в Spring Boot 3:

import java.util.function.BiConsumer;

public void send(String topic, K key, V message, BiConsumer<SendResult<K, V>, Throwable> callback) {
    CompletableFuture<SendResult<K, V>> future = kafkaTemplate.send(topic, key, message);
    if (Objects.nonNull(callback)) {
      future.whenComplete(callback);
    }
  }
......

// call kafka method
kafkaProducer().send("topic", "key",
        "messge", listenableFutureCallback("12345"));

......
    
    private ListenableFutureCallback listenableFutureCallback(String userId) {
        return new ListenableFutureCallback() {
          @Override
          public void onFailure(Throwable ex) {
            .......
          }
    
          @Override
          public void onSuccess(Object result) {
            ........
          }
        };
      }

Я получаю ошибку в этой строке: listenableFutureCallback("12345")

Cannot find required type
Required type: BiConsumer <org.springframework.kafka.support.SendResult<java.lang.String,java.lang.String>,
java.lang.Throwable>
Provided: ListenableFutureCallback

Знаете ли вы, как мне перенести/заменить ListenableFutureCallback, чтобы вернуться BiConsumer из listenableFutureCallback метода Java?

Очевидно, что ListenableFutureCallback не расширяется и не напоминает BiConsumder <org.springframework.kafka.support.SendResult<java.lang.Stri‌​ng,java.lang.String>‌​, java.lang.Throwable>. Так заставь это сделать.

user207421 28.04.2024 06:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
103
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете обновить реализацию обратного вызова следующим образом:

import org.springframework.kafka.support.SendResult;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
import java.util.function.BiConsumer;

public void send(String topic, String key, String message, BiConsumer<SendResult<K, V>, Throwable> callback) {
    CompletableFuture<SendResult<K, V>> future = kafkaTemplate.send(topic, key, message);
    if (Objects.nonNull(callback)) {
        future.whenComplete(callback);
    }
}

// call kafka method
void test() {
    send("topic", "key",
            "messge", listenableFutureCallback("12345"));
}


public BiConsumer<SendResult<K, V>, Throwable> listenableFutureCallback(String userId) {
    return new BiConsumer<SendResult<K,V>, Throwable>() {

        @Override
        public void accept(SendResult<K, V> kvSendResult, Throwable throwable) {
            if (null != throwable) {
                // same flow as of onFailure
            } else {
                // onSuccess flow
            }
        }
    };
}

Я использую import java.util.function.BiConsumer;

Peter Penzov 12.04.2024 16:36

Извини, моя ошибка. Не заметил этого. Обновил ответ. Эту реализацию BiConsumer можно использовать в качестве обратного вызова. Не забудьте также обновить тип возвращаемого значения на BiConsumer<SendResult<K,V>, Throwable>. Спасибо.

anoy_troy 12.04.2024 17:21

хм... я понимаю Cannot resolve symbol 'V'. Можете ли вы вставить полный код, пожалуйста?

Peter Penzov 12.04.2024 20:50

Конечно, обновил. В случае ошибки, о которой вы упоминаете, пожалуйста, еще раз проверьте, определен ли класс с помощью дженериков K и V, т. е. public class SpringBootApplication<K, V>. Надеюсь, поможет!

anoy_troy 13.04.2024 08:34

Другие вопросы по теме