Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 3

Создание объекта класса и вызов его метода

28.07.2014, 20:06. Показов 4942. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день, форумчане. На Яве программирую не больше недели. Столкнулся со следующей проблемой. Есть 2 класса Class1 и Class2 с методом work(). Xотел сделать следующее, при определённом условии switch case создать экземпляр соотвествующего класса и вызвать метод work(), на что компилятор ругается. Код Java:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String urlString = "http://lalal.ru/class=class1&param2=lalala";
URL url = new URL(urlString);
String query = url.getQuery();
HashMap params = su.getQueryMap(query);
 
switch(params.get("class").toString())
{
    case "class1":
        Class1 o = new Class1();
        break;
 
    case "class2":
        Class2 o = new Class2();
        break;
}
 
o.work();
В php это выглядит так:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
switch($_GET['class'])
{
    case 'class1':
        require_once 'includes/class1.inc.php'; 
        $o = new class1();
    break; 
 
    case 'class2':
        require_once 'includes/class2.inc.php'; 
        $o = new class2();
    break;
}
 
$o->work();
Как реализовать подобного рода конструкцию? Если такие конструкции невозможны на Яве, то какие посоветуете решения?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2014, 20:06
Ответы с готовыми решениями:

Создание объекта класса, если его имя находится в строковой перменной.
Как создать объект класса, если его имя находится в строковой перменной, скажем, было считано из файла?

Создание и вызов еще одного метода (swap)
public class Main { public static void main(String args) { int x = 5 , y = 0; System.out.println(x + "...

Создание объекта дочернего класса в родительском классе
Подскажите, может кто знает, как в предке сосдать экземпляр потомка? или как сделать копию this? так чтобы при добавлении в...

4
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
28.07.2014, 20:18
Лучший ответ Сообщение было отмечено AgenTVano как решение

Решение

AgenTVano, ну у вас компилятор наверно ругается на то что объект о за свичом неизвестен...что логично
так что или так
Java
1
2
3
4
5
6
7
8
9
10
11
12
switch(params.get("class").toString())
        {
        case "class1":
        Class1 o = new Class1();
        o.work();   
        break;
 
        case "class2":
        Class2 o = new Class2();
        o.work();
        break;
        }
или можно пострадать фигней вот так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
interface Workable() {
        void work();
}
class Class1 implements Workable{}
class Class2 implements Workable{}
 
        Workable o = null;
 
        switch(params.get("class").toString())
        {
        case "class1":
        o = new Class1();
        break;
 
        case "class2":
        o = new Class2();
        break;
        }
 
        o.work();
1
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 3
29.07.2014, 00:17  [ТС]
newb_programmer, Первый вариант к сожалению не подходит, методов у этих классов достаточно, а дублировать одинаковый код в switch не есть хорошо. Второй вариант интересней, но возникает вопрос, а более изящного решения нету ? Просто так перечислять по 5 методов у каждого из класса не хотелось бы
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
29.07.2014, 01:47
AgenTVano, второй вариант - и есть самый правильный. Прямо тру, как говорится.
Не очень понял про перечисление методов у каждого класса. Вы же всё равно эти методы в классах должны будете определить.
0
0 / 0 / 0
Регистрация: 28.07.2014
Сообщений: 3
29.07.2014, 12:37  [ТС]
Это я вчера с вечера чё то не так понял, организовал сегодня через интерфейсы всё это дело, всё получилось спасибо большое за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2014, 12:37
Помогаю со студенческими работами здесь

Динамический вызов метода объекта (рефлексия)
У меня есть в виде строки название метода объекта, как я могу вызвать этот метод? Везде в сети находил примеры только как вызывать методы,...

Вызов метода класса
Добрый день. Недавно начал изучать Java, сейчас потребовалось написать программу для учебы(учусь не на программиста), которая считывает...

Вызов метода класса
Доброго времени суток! В попытках написать лабораторную работу понаписывал черт его знает чего. Кто поможет разобраться?)) Сама...

Вызов метода из другого класса
Собственно не получается вызвать метод из класса math public class math { int i,a,b,c,n,sum; int A; int...

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru