| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Преобразовать строку в вызов |
| Автор: StepS 10.10.2005, 12:41 |
| Привет всем, такой вопрос: есть строка: "MyObject.MyMethod("+10+");" как эту строку выполнить чтоб она отработала, т.е. нашелся объект MyObject и у него вызвался метод MyMethod в который передалось число 10 ??? И вообще такое возможно ? |
| Автор: batigoal 10.10.2005, 12:58 |
| Видимо, надо копать в сторону механизма рефлексии. Можно посмотреть общие сведения в нашем FAQ ( http://forum.vingrad.ru/index.php?act=module&module=vingradfaq&target=main_panel&article=2888), но решения твоей проблемы там нет. |
| Автор: pvo 10.10.2005, 13:06 |
| Советую глянуть в сторону BeanShell или JavaScript( Rhino ). Они как раз и используют reflection, но пользоваться ими удобнее. Еще вариант - сделать динамическое создание и компиляцию классов, но это сложнее и оправдано в том случае, если предполагается повторное использование выражений. |
| Автор: StepS 10.10.2005, 13:10 |
| то что нужно копать в сторону reflection эт я знаю |
| Автор: batigoal 10.10.2005, 13:18 |
| Имхо, получить объект по имени нельзя - у него ведь нет имени Только если создать новый объект по имени класса. |
| Автор: Metal_Heart 10.10.2005, 13:36 |
| а если объекту добавтить поле "ИМЯ" ? |
| Автор: pvo 10.10.2005, 13:38 | ||||
Пример использования BeanShell (http://www.beanshell.org/). С JavaScript - похоже. Его искать на мозилле нужно, называется rhino.
А вот такая задачка в общем случае неразрешима ... Для того, чтобы объект нашелся, он должен где-то храниться, например в мапе |
| Автор: StepS 10.10.2005, 13:49 | ||||
это если мы знаем какой объкт мы собираемся создавать ! а если не знаем ..?? например я пишу в текстовом поле: MyObject.BuildAnyThing() и нажимаю кнопочку <Execute> и начинает выполнятся метод BuilAnyThing() класса MyObject. и вместо MyObject я могу написать YouObject, если такой есть класс ! |
| Автор: pvo 10.10.2005, 13:57 | ||||
Я же говорю, что в общем случае задачка поиска любого объекта - нерешаема. Тут надо малость конкретизировать - например, если MyObject каждый раз создается новый и имеет ктор без параметров, то пишешь что-нить типа:
А если тебе нужно использовать произвольный объект, созданный в приложении, то - извини, но так не получится (ИМХО) |
| Автор: StepS 10.10.2005, 14:39 |
| ясно спасиба ! я такой же вопрос задал на форуме C# там есть решение такой задачи ! думал в Java тоже есть, ан нет еще разок спасиб, надеюсь что скоро в яве такая возможность появиться |
| Автор: pvo 10.10.2005, 14:55 | ||
Глянул, что тебе там написали - ровно тоже самое, что и тут. Поиск класса в Java тоже можно реализовать, например с помощью Package.getPackages(); Нельзя найти экземпляр объекта, созданный где-то в программе. |