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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразовать строку в вызов 
:(
    Опции темы
StepS
  Дата 10.10.2005, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Привет всем, такой вопрос:
есть строка: "MyObject.MyMethod("+10+");" как эту строку выполнить чтоб она отработала, т.е. нашелся объект MyObject и у него вызвался метод MyMethod в который передалось число 10
???

И вообще такое возможно ? smile
PM MAIL ICQ   Вверх
batigoal
Дата 10.10.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Видимо, надо копать в сторону механизма рефлексии. Можно посмотреть общие сведения в нашем FAQ ( Java Reflection), но решения твоей проблемы там нет.

Это сообщение отредактировал(а) Lamer George - 10.10.2005, 13:14


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
pvo
Дата 10.10.2005, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Советую глянуть в сторону BeanShell или JavaScript( Rhino ).
Они как раз и используют reflection, но пользоваться ими удобнее.

Еще вариант - сделать динамическое создание и компиляцию классов, но это сложнее и оправдано в том случае, если предполагается повторное использование выражений.
PM MAIL ICQ   Вверх
StepS
Дата 10.10.2005, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



то что нужно копать в сторону reflection эт я знаю smile, только вот,ознакомившись с этим механизмом, не смог сообразить как такое реализовать ! Я подумал может кто-то с таким уже сталкивался и он поможет примерчиком или хотябы скажет в таком-то документе в такой-то главе описана похожая задача, посмотри там !
PM MAIL ICQ   Вверх
batigoal
Дата 10.10.2005, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Имхо, получить объект по имени нельзя - у него ведь нет имени smile
Только если создать новый объект по имени класса.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Metal_Heart
Дата 10.10.2005, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а почему бы и нет?
**


Профиль
Группа: Участник
Сообщений: 728
Регистрация: 31.3.2005
Где: Москва

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



а если объекту добавтить поле "ИМЯ" ?


--------------------
 не стыдно учиться, а стыдно не учиться 
PM ICQ   Вверх
pvo
Дата 10.10.2005, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Пример использования BeanShell (http://www.beanshell.org/). С JavaScript - похоже. Его искать на мозилле нужно, называется rhino.
Код

                                Interpreter interpreter = new Interpreter();
                                String script = "MyObject.myMethod( value );"
                Object src = new MyObject();
                interpreter.set("MyObject", src);
                                interpreter.set( "value", new Integer( 10 ) );
                interpreter.eval(script);






Цитата(StepS @ 10.10.2005, 12:41)
т.е. нашелся объект MyObject и

А вот такая задачка в общем случае неразрешима ... Для того, чтобы объект нашелся, он должен где-то храниться, например в мапе
PM MAIL ICQ   Вверх
StepS
Дата 10.10.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



Цитата

Код

      Interpreter interpreter = new Interpreter();    
                                String script = "MyObject.myMethod( value );"    
                Object src = new MyObject();    
                interpreter.set("MyObject", src);    
                                interpreter.set( "value", new Integer( 10 ) );    
                interpreter.eval(script);



это если мы знаем какой объкт мы собираемся создавать ! а если не знаем ..??
например я пишу в текстовом поле: MyObject.BuildAnyThing() и нажимаю кнопочку <Execute> и начинает выполнятся метод BuilAnyThing() класса MyObject. и вместо MyObject я могу написать YouObject, если такой есть класс !
PM MAIL ICQ   Вверх
pvo
Дата 10.10.2005, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(StepS @ 10.10.2005, 13:49)
это если мы знаем какой объкт мы собираемся создавать ! а если не знаем ..??
например я пишу в текстовом поле: MyObject.BuildAnyThing() и нажимаю кнопочку <Execute> и начинает выполнятся метод BuilAnyThing() класса MyObject. и вместо MyObject я могу написать YouObject, если такой есть класс !


Я же говорю, что в общем случае задачка поиска любого объекта - нерешаема.
Тут надо малость конкретизировать - например, если MyObject каждый раз создается новый и имеет ктор без параметров, то пишешь что-нить типа:

Код

     String name = "MyObject"; // Считаем, что пакета нет.
     try {
         Class clazz = Class.forName( name );
         Object instance = clazz.newInstance();
         interpreter.set( name, instance );
         ....
   
     } catch ( Exception ex ) {
          // Обработка ошибки
    }



А если тебе нужно использовать произвольный объект, созданный в приложении, то - извини, но так не получится (ИМХО)

Это сообщение отредактировал(а) pvo - 10.10.2005, 14:04
PM MAIL ICQ   Вверх
StepS
Дата 10.10.2005, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 26.8.2005
Где: Днепропетровск

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



ясно спасиба !
я такой же вопрос задал на форуме C# там есть решение такой задачи ! думал в Java тоже есть, ан нет smile
еще разок спасиб, надеюсь что скоро в яве такая возможность появиться
PM MAIL ICQ   Вверх
pvo
Дата 10.10.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(StepS @ 10.10.2005, 14:39)
ясно спасиба !
я такой же вопрос задал на форуме C# там есть решение такой задачи ! думал в Java тоже есть, ан нет smile
еще разок спасиб, надеюсь что скоро в яве такая возможность появиться


Глянул, что тебе там написали - ровно тоже самое, что и тут.
Поиск класса в Java тоже можно реализовать, например с помощью Package.getPackages();
Нельзя найти экземпляр объекта, созданный где-то в программе.

Это сообщение отредактировал(а) pvo - 10.10.2005, 15:04
PM MAIL 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.0500 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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