Ошибка синтаксиса Java: Required type: GetUpdates Provided: void

Рейтинг: -1Ответов: 1Опубликовано: 12.05.2023

Хотел написать простенький телеграм бот, но столкнулся с ошибкой. У меня есть метод waitUserInput(), который ждет ответа пользователя и возвращает строку с тем, что ввел пользователь. Но в коде есть 1 ошибка, которую я никак не могу исправить.

public String waitUserInput() {
    TelegramBot bot = new TelegramBot();
    String userInput = "";
    int lastUpdateId = 0; // переменная для хранения идентификатора последнего обновления

    while (true) {
        List<Update> updates = new ArrayList<>();
        try {
            GetUpdates getUpdates = new GetUpdates().setOffset(lastUpdateId + 1);
            updates = bot.execute(getUpdates);
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }

        for (Update update : updates) {
            if (update.hasMessage() && update.getMessage().hasText()) {
                userInput = update.getMessage().getText();
                lastUpdateId = update.getUpdateId(); // обновляем значение идентификатора последнего обновления
            }
        }

        if (!userInput.isEmpty()) {
            break;
        }

        try {
            Thread.sleep(1000); // ждем 1 секунду перед повторной проверкой наличия новых сообщений
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    return userInput;
}

А именно в строке

GetUpdates getUpdates = new GetUpdates().setOffset(lastUpdateId + 1);

возникает ошибка

Required type: GetUpdates
Provided: void

Помогите пожалуйста.

Ответы

▲ 2

Видимо, в том API, которым вы пользуетесь, метод setOffset() класса GetUpdates ничего не возвращает, то есть, возвращаемым типом имеет void.

Вы вызываете его, и результат (void!) пытаетесь присвоить переменной типа GetUpdates, поэтому и возникает ошибка.

То, что вы делаете, нужно разделить на две строки, чтобы всё работало так, как ожидается:

GetUpdates getUpdates = new GetUpdates();
getUpdates.setOffset(lastUpdateId + 1);