0 / 0 / 0
Регистрация: 17.01.2011
Сообщений: 83

Вызыв функции или объявление объекта через переменную

16.08.2006, 21:44. Показов 2382. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли в JAVA какнибуть вызвать функцию или объявить объект через переменную, т.е
String s = "name";
s obj = new s();
оналогично
name obj = name();
В php такое возможно. Может быть есть какойто метод который объевляет или вызывает функции по их названию?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2006, 21:44
Ответы с готовыми решениями:

Объявление объекта внутри функции
Здраствуйте. У меня такой вопрос: есть класс class A { public: A(): p1(p2),p2(new int) { }

Создание копии объекта используя объявление через указатель
Здравствуйте. Имеется такой код: #include <iostream> #include <cstring> using namespace std; class medicament { private: ...

Объявление класса, создание объекта и вызов функции-члена
Всем добрый день! Вот так я объявляю класс. typedef map<string, double> datablock; typedef map<string, string> groupvars;...

3
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
16.08.2006, 22:53
Объявить нельзя. Вызвать можно.



См. следующие APIs

java.lang.Object.getClass();

java.lang.Class

java.lang.Class.forName();

java.lang.Class.newInstance();

java.lang.Class.getMethods();

java.lang.Class.getMethod(...)

java.lang.Class.getConstructor(...);

java.lang.Class.getConstructors();
0
1 / 1 / 1
Регистрация: 05.01.2010
Сообщений: 235
17.08.2006, 12:41
чтобы вызвать метод суммирования
Java
1
2
3
4
5
6
public class Test {
    
    public int summ(int x1, int x2) {
        return x1 + x2;
    }
}
нужно сделать так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
        try {
            Method mySummer = Test.class.getMethod("summ", new Class[] {int.class, int.class});
            int ans = (Integer) mySummer.invoke(new Test(), 2, 3);
            System.out.println("summ is " + ans);
        } catch (IllegalArgumentException ex) {
            // что-то не то с аргументами
        } catch (NoSuchMethodException ex) {
            // нет такого метода
        } catch (IllegalAccessException ex) {
            // нет доступа к этому методу (private скажем)
        } catch (InvocationTargetException ex) {
            // исключение в вызываемом методе
        }
Для sdk версии до 1.5 придется написать как-то типа
Java
1
Integer ans = (Integer) mySummer.invoke(new Test(), new Integer[] {new Integer(2), new Integer(3)});
"типа" - потому что у меня так и не заработало...

Но главный совет - не делай так Список исключений подсказывает с каким количеством проблем можно встретиться (скажем, если ошибешься в имени функции - компилятор не помощник). Так что лучше подумай не получится ли это заменить каким-нибудь списком классов, реализующих один интерфейс. Скорее всего, избавишь себя от кучи проблем.
0
4 / 4 / 4
Регистрация: 28.08.2008
Сообщений: 611
17.08.2006, 15:32
Последний абзац, написанный Vadim_ig, просто в яблочко. Лучше так не делать. Он прав.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2006, 15:32
Помогаю со студенческими работами здесь

Доступ к свойству объекта через переменную
#include <iostream> class Student { public: char* fname; char* sname; Student(char* fname, char * sname) { ...

Вызов объекта через строковую переменную
Excel. Есть книга с главным листом и множеством второстепенных. Задача: создать кнопки(togglebutton) на главном листе для скрытия и...

Задать свойство объекта через переменную
Добрый день. Есть такой код: $('.sliderBlock .textInput').on("blur", function() { var valueType =...

Объявление функции через #define
Доброе время суток, у меня возник такой вопрос. Хотел сократить код для получения кол-ва ячеек в массиве ...

Как получить ширину объекта через переменную?
Здравствуйте! Как получить ширину объекта, префаба?


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru