|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
1 Наименование метода, который надо вызвать для данного класса определяеться во время выполнения программы ( из файла). Подскажите как это сделать 2 В фале также может быть записан и исходный код который тоже надо вызвать. Подскажите плиз ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2003, 17:03 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
1. Не знаю. 2. Не понял, что значит "вызвать"? Скомпилить на лету и выполнить? Есть мнение, что дизайн несколько кривоват. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.05.2003, 17:21 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
2 Oracle_Developer 1. А-ля reflection ;-) Как пример: http://www.javacommerce.com/articles/reflection.htm 2. javac :-))) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2003, 17:06 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
reflection - eto krasivo, no gemoroyno dlia otladki. Voobshe ispol'zovat' nekompilirovanniy kod - eto opasno, xot' i teoreticheski vozmozhno (sam ne delal). Sovetuu vse-taki loadit' ne kod a config files, kotorie bydyt prosto ykazivat', kakoy metod ispol'zovat' pri razlichnix ysloviiax. ZHelatel'no, chto sami classi/metodi bili yzhe otkompilirovani i podklycheni (loaded). Eto - obshie soveti. Mozhet, esli ti ob'iasnish' sityaciy popodrobnee, chto-nibyd' eshe pridymaem... JJ ... |
|||
:
Нравится:
Не нравится:
|
|||
09.05.2003, 20:34 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
Developer ! Вообще тема очень интересная. Скоро мне предстоит рабиратся с подобной задачей, но несколько шире: 1. Загрузка выполняемого кода приложения с сервера. 2. Обмен между серверами БД директивами, содержащими описание действий, которые нужно выполнить на удаленном сервере + данные. Можем обсудить идеи реализации ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 09:29 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
"Eto - obshie soveti. Mozhet, esli ti ob'iasnish' sityaciy popodrobnee, chto-nibyd' eshe pridymaem... " Задача ставиться следующим образом. 1) Есть XML-документ. 2) Этот XML-документ надо разобрать . В процессе разбра он может быть достроен т.е в исходном документе есть куски текста который тоже надо разобрать и структурировать как XML-документ. 3) Есть файл который описывает метод применяемый к у узлу с наименованием таким-то ( из стандартного набора или исходный код этого метода) 4) файл значит мы разобрали. дополнили. теперь надо его обойти и для каждого узла вызвать метод из файла нстройки. Проблемы 1) Как вызвать метод. Вроде понятно где копать. Но как проектировать не понятно. Вроде хорошо бы иметь базовый класс для которого определить все возможные методы и для его потомка динамически вызывать конкретный. Но тут проблема создания такого класса. Ведь разбор XML осуществляеться персером DOMParser parser = new DOMParser(); parser.parse((new File(p_FileName)).toURL().toString()); doc = parser.getDocument(); ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 13:33 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
осмелюсь поделиться собственным опытом соединения логики, выполненной на компилированных методах, с логикой ,загружаемой во время исполнения. я для этого использую базовое ядро машины языка Prolog (интерпретатор) совместно с базовыми классами Java. при этом хорошо подходят именно те реализации Prolog - машина которых также реализована на java. Таким образом появляется возможность загружать интерпретируемый код языка Prolog(predicates) во время исполнения java классов. -- вообще существует ряд реализаций языков интерпретаторов на базе Java см. http://grunge.cs.tu-berlin.de/~tolk/vmlanguages.html -- ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 14:50 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
2 Oracle_Developer Проблемы 1) Как вызвать метод. Вроде понятно где копать. Но как проектировать не понятно. Вроде хорошо бы иметь базовый класс для которого определить все возможные методы и для его потомка динамически вызывать конкретный. Но тут проблема создания такого класса. Ведь разбор XML осуществляеться персером DOMParser parser = new DOMParser(); parser.parse((new File(p_FileName)).toURL().toString()); doc = parser.getDocument(); Как вызвать метод, приведено выше. Вообще-то файл настроек у Вас должны явно указывать, я думаю, что и как делать, типа: класс, имя метода,параметры... как пример: a.conf: <do on-node="Test"> <class name="x.TestContructor"> <method name="produce"> <param name="nodeName" type="string"/> </method> </class> </do> ( public class TestContructor extends AbstractConstructor { public TestContructor(){ } public void produce(String nodeName) { } } ) Дальше, зачем определять все возможные методы??? У Вас же там все происходит в пределах нода, или как? Вот его и надо передавать (при условии что там есть необходимая информацмя) А если еще есть типа второстепеные вещи, то думаю, сделать типа context'a (т.е. например TestConstructor должен получить доступ к каким-нибудь глобальным объектам) Вот. Далее, ну и что разбирается парсером? В этом то какая проблема? Кстати вопрос еще, что будет лучше использовать: DOM ili SAX. Это уже зависть от того что нужно TestContructor'u... В итоге, мне покрайне мере не полностью ясна картина, т.е. что вообще нужно. Могли бы поконкретней, тогда можно уже что-то более реальное предложить. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 16:15 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
Да в файле указываеться Класс,Метод,Параметры. "Дальше, зачем определять все возможные методы??? У Вас же там все происходит в пределах нода, или как? " А как не определять напрмер <Class1> <Method Name="Method1"> <Parameter Name="Date" Value="02/02/2003"/> </Method> </Class1> <Class2> <Method Name="Method2"> <Parameter Name="Date" Value="02/02/2003"/> </Method> </Class2> Нужно будет потом вызвать для Class1 - Method1. Для Class2 - Method2. Как я понимаю вы предлогаете ввести базовый класс и все объекты XML-документа т.е все дерево перевести в дерево где узлами будут потомки этого класса. И при обходе смотреть файл настройки для данного класса и вызывать метод? только вот это не понятно public class TestContructor extends AbstractConstructor { public TestContructor(){ } public void produce(String nodeName) { } } ) у меня ведь список классов не фиксирован. фиксированы только методы. Классы можно добавлять на ходу.Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 20:56 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
Vspomnil! http://jakarta.apache.org/commons/index.html digester http://jakarta.apache.org/commons/digester.html Poxozhe, eto to chto doktor propisal. JJ ... |
|||
:
Нравится:
Не нравится:
|
|||
14.05.2003, 23:10 |
|
Как динамически вызвать метод с параметрами
|
|||
---|---|---|---|
#18+
2 Oracle_Developer Да в файле указываеться Класс,Метод,Параметры. Ясненько. "Дальше, зачем определять все возможные методы??? У Вас же там все происходит в пределах нода, или как? " А как не определять напрмер <Class1> <Method Name="Method1"> <Parameter Name="Date" Value="02/02/2003"/> </Method> </Class1> <Class2> <Method Name="Method2"> <Parameter Name="Date" Value="02/02/2003"/> </Method> </Class2> Нужно будет потом вызвать для Class1 - Method1. Для Class2 - Method2. Как я понимаю вы предлогаете ввести базовый класс и все объекты XML-документа т.е все дерево перевести в дерево где узлами будут потомки этого класса. И при обходе смотреть файл настройки для данного класса и вызывать метод? Да, базовый класс ( или интерфейс) при условии что Вы будите использовать какой-либо контекст и сам ноде Вам нужен в качестве источника данных. Если же сами классы и вся логика несвязана с обрабатываемым нодом (как источником данных), то конечто, любые классы, любые методы. При этом, безусловно ненужен никакой базовый класс. Другими словами Вы определяете триггер на определенный нод и все. Нет, дерево ненадо переводить никуда. Просто определить, когда класс + метод(ы) будут вызываться, т.е. маппинг. javajdbc предложил уже готовый продукт, что сообственно digester и делает. Маппинг между ноде и тем что нужно выполнить, над етим ноде и все. только вот это не понятно public class TestContructor extends AbstractConstructor { public TestContructor(){ } public void produce(String nodeName) { } } ) Здесь типа базовый класс... у меня ведь список классов не фиксирован. фиксированы только методы. Классы можно добавлять на ходу.Спасибо. P.S. В принципе это очень все похоже на XSL :-)) xml: <Customer id="1"> <Email address="go2null" prefered="true"> </Customer> config: <template match="/Customer/Email"> <x:class name="EmailService"> <x:method name="sendEmail" value="@address"/> </x:class> <template> ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2003, 14:43 |
|
|
start [/forum/topic.php?fid=59&fpage=861&tid=2154646]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
325ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 281ms |
total: | 707ms |
0 / 0 |