Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вызов неизвестных методов (eval) 
:(
    Опции темы
MatrixMaster
Дата 24.10.2003, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.10.2003

Репутация: нет
Всего: нет



дано: имена пакетов, классов, методов.
Надо: подключить данные классы данных пакетов, и вызвать (выполнить) данный метод.

Как это сделать..
eval'а - то нет wink.gif

PM MAIL WWW ICQ   Вверх
Sun
Дата 24.10.2003, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Account removed
***


Профиль
Группа: Экс. модератор
Сообщений: 1611
Регистрация: 14.8.2002

Репутация: 8
Всего: 48



А нельзя ли поподробней? Насколько я понял, нужно организовать выполнение методов классов на лету, указав имя класса и имя метода?
Если так, то существует класс java.lang.Class, который может вернуть экземпляр класса указав имя класса и пакет. Есть также возможность извлечь метод (invoke) нужного класса.
Этот механизм чем-то похож на работу с Dll. При помощи Classloader загружается класс, вызывается конструктор а затем извлекаются и запускаются методы.


--------------------
Account removed
PM MAIL   Вверх
DarkDS
Дата 25.10.2003, 13:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Если пакет и классы уже есть класспасе, то делается все просто:

Код

String pakName = "com.test.";
String className = "Test";
try
{
  //Get panel class
  Class pClass = Class.forName( panelClassName );
/*
//Если у класса нет коснтруктора, без параметров, но известен конструктор с конечным числом
//параметров.(к примеру есть 2-а параметра и известны их классы). Если не понятно - объясню
  Constructor constructor = pClass.getConstructor( new Class[]{классПараметра1,классПараметра2 } );
  Object o = constructor.newInstance( new Object[]{параметр1, параметр2} );
*/
  Object o = pClass.newInstance();
  Class fClass = o.getClass();
  Method method = fClass.getMethod( methodName, new Class[]{} ); //Нет параметров... Иначе new Class[]{классПараметра1,классПараметра2 }
  Object obj = method.invoke( object, new Object[]{} ); //Нет параметров... Иначе new Object[]{параметр1, параметр2}
//Полученный obj - результат вызова метода
}
catch ( Exception e )
{
  //Error
  e.printStackTrace();
  removeAll();
}



PM MAIL   Вверх
MatrixMaster
Дата 25.10.2003, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.10.2003

Репутация: нет
Всего: нет



Sun ага. верно ты понял.
DarkDS спасибо!
PM MAIL WWW ICQ   Вверх
MatrixMaster
Дата 26.10.2003, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.10.2003

Репутация: нет
Всего: нет



вот вопросец возник в ходе реализации.

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

поясню.
что бы использовать метод getMethod нужно знать
Цитата
new Class[]{классПараметра1,классПараметра2

равно как и
Цитата
Object[]{параметр1, параметр2}

в принципе список можно получить используя getParameterTypes() класса Method, но ведь у нас ЕЩЕ нет объекта типа Method, что бы вызвать этот getParameterTypes()..



PM MAIL WWW ICQ   Вверх
DarkDS
Дата 27.10.2003, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

Репутация: 11
Всего: 16



Можно получить список всех методов у класса и проверять их имена... .getMethods(). возращает Method[]
Но... Тут может возникнуть проблемма с заполнением параметров..

Это сообщение отредактировал(а) DarkDS - 27.10.2003, 10:05
PM MAIL   Вверх
MatrixMaster
Дата 27.10.2003, 10:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 24.10.2003

Репутация: нет
Всего: нет



DarkDS жаль. я думал что есть более красивый метод, чем тот, что я реализовал ...

PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.