Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
6 / 5 / 1
Регистрация: 29.12.2014
Сообщений: 177

Классы и наследование

08.11.2019, 16:54. Показов 2462. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу бота, но прошу не переносить тему в сети ибо вопрос не косвенно только туда относится.

Каким образом в java можно вынести "функцию" в отдельный класс
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
public class Bot extends TelegramLongPollingBot {
    protected Bot(DefaultBotOptions botOptions) {
        // тут будем подключать все наши модули
        super(botOptions);
 
 
 
    }
 
    @Override
    public void onUpdateReceived(Update update) { // если произошло событие сервер отправляет нам запрос и тут м ыего обрабатываем
        update.getUpdateId();
        SendMessage sendMessagee = new SendMessage().setChatId(update.getMessage().getChatId()); // создаем SendMessage и получаем сообщения и чат id (ID пользователя в данном случае это одно и тоже )
        sendMessagee.enableMarkdown(true); // включаем разметку
 
        String message = update.getMessage().getText(); // создадим переменную message и за одно запишем текст сообщения в переменную message
        UserLogW userlogW = new UserLogW();// Логи пользователей
        userlogW.write(update.getMessage().getChatId().toString());// отправим данные о пользователе в нашу BD
        Button button = new Button();
 
        if (update.getMessage().getText().equals("/start")) {
 
            sendMessagee.setText("Бла бла бла бла бла бла");
            try {
                execute(sendMessagee);
 
            } catch (TelegramApiException e) {
            
                e.printStackTrace();
            }
 
    }
    }


речь пойдет о вот этом куске кода
Java
1
2
3
4
5
6
7
8
9
10
   if (update.getMessage().getText().equals("/start")) {
 
            sendMessagee.setText("Бла бла бла бла бла бла");
            try {
                execute(sendMessagee);
 
            } catch (TelegramApiException e) {
                System.out.println("Start");
                e.printStackTrace();
            }
Я бы хотел создать класс к примеру CmdStart
и от туда уже выводить сообщения но если выше упомянутый код перенести в класс CmdStart
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
import javax.swing.*;
 
public class CmdStart  {
 
 
 
    public synchronized void Start() {
        SendMessage sendMessage= new SendMessage();
        
        sendMessagee.setText("Бла бла бла бла бла бла");
        try {
            execute(sendMessagee);
 
        } catch (TelegramApiException e) {
            System.out.println("Start");
            e.printStackTrace();
        }
    }
 
 
}
Очевидно я допустил ошибку и прошу пояснить этот момент взаимодействия классов в java
Как правильно перенести инструкции и как их потом правильно вызывать ?
Java
1
2
CmdStart cmdStart= new CmdStart();
cmdStart.Start();
В идеале я бы конечно хотел создать еще и функцию вывода сообщения что бы ее использовать в других классах
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2019, 16:54
Ответы с готовыми решениями:

Наследование, базовые классы и производные классы
Добрый вечер.Задание: необходимо разработать поля и методы наследуемые из базового класса и собственные компоненты производных...

Классы и наследование (Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию вычисления объёма.)
Уважаевые, помогите написать прожку на экзамене: Создать класс 3D фигура, и производные классы шар, конус, цилиндр и куб. Создать функцию...

Классы и наследование
Помогите пожалуйста, совсем все сложно :( Задание: Разработать модуль для описания системы ГИБДД. Описать следующие классы:...

3
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
08.11.2019, 18:15
И какая именно ошибка?

после создания SendMessage, вы не указываете id чата, а в классе Bot - указываете
И если из CmdStart вы будете часто отправлять сообщения, то скорее всего, можно просто вынести эту переменную как поле класса.

Добавлено через 38 минут
Извините, я понял в чем проблема, не увидел что execute вызывается от родителя.
Тогда сделайте переменную Bot как поле для CmdStart:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
public class CmdStart  {
    private Bot bot;
    private SendMessage sender;
 
    CmdStart(Bot bot) {
        this.bot = bot;
        
        sender = new SendMessage();
    }
 
    public synchronized void start() throws TelegramApiException {
        sender.setText("Бла бла бла бла бла бла");
 
        bot.execute(sender);
    }
}
А в Main или еще где инициализируется как-то Bot:

Java
1
2
3
4
5
6
7
8
9
10
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
public class Main {
    public static void main(String[] args) throws TelegramApiException {
        Bot bot = new Bot(null);
        CmdStart commander = new CmdStart(bot);
        
        commander.start();
    }
}
1
6 / 5 / 1
Регистрация: 29.12.2014
Сообщений: 177
08.11.2019, 18:28  [ТС]
sdasdaw, А если я хочу вызывать start в Bot ? а не из main ?
0
 Аватар для sdasdaw
406 / 278 / 93
Регистрация: 14.03.2017
Сообщений: 777
08.11.2019, 18:39
Лучший ответ Сообщение было отмечено Leitto как решение

Решение

Leitto, тогда я сделал бы так:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import org.telegram.telegrambots.meta.api.methods.send.SendMessage;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
public class CmdStart  {
    private Bot bot;
    private SendMessage sender;
 
    CmdStart(Bot bot) {
        this.bot = bot;
 
        sender = new SendMessage();
        sender.enableMarkdown(true);
    }
 
    public synchronized void start(Long chatId) throws TelegramApiException {
        sender.setChatId(chatId);
        sender.setText("Бла бла бла бла бла бла");
 
        bot.execute(sender);
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import org.telegram.telegrambots.bots.DefaultBotOptions;
import org.telegram.telegrambots.bots.TelegramLongPollingBot;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.exceptions.TelegramApiException;
 
public class Bot extends TelegramLongPollingBot {
    private CmdStart commander;
 
    protected Bot(DefaultBotOptions botOptions) {
        super(botOptions);
 
        this.commander = new CmdStart(this);
    }
 
    @Override
    public void onUpdateReceived(Update update) {
        Message message =update.getMessage();
        
        String txt = message.getText();
        Long chatId = message.getChatId();
        
        try {
            switch(txt) {
                case ("/start"):
                    this.commander.start(chatId);
            }
        } catch (TelegramApiException e) {
            e.printStackTrace();
        }
    }
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.11.2019, 18:39
Помогаю со студенческими работами здесь

Классы. Наследование
Следующая ситуация: class A: instances = def asdf(): for x in A.instances: .... ...

Классы, наследование
Есть родительский класс Base, у него дочерний класс Child1, у Child1 дочерний Child2; Задача в том что-бы у класса Child1, не было...

Классы(наследование)
На поверхности,которая наклонена к горизонтали лежит тело в виде прямоугольника с определенными размерами. Как правильно написать...

Классы и наследование
Предисловие: Есть множество классов с практически одинаковыми функциями и разными переменными. При создании объекта переменные типа лист,...

Классы, наследование
Здравствуйте, столкнулся с этой задачей и не могу её решить, буду крайне благодарен за советы или примеры реализации. Классы программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru