|
|
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Могу ли я в java динамически загрузить (скомпилировать?) некий класс, который описан в неком файле, при том что он наследует от имеющихся в базе классов? Как называется эта технология. Мне нужно загрузить не данные экземпляра класса, а именно новый функционал. Хочу разделить код ядра и прикладного уровня. Ядро не меняем, а прикладные объекты меняем часто и перезагружаем их функционал из класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:21:46 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Как называется - не знаю, но точно можно. Есть где-то кусок кода, где это реализовно, лень искать. А как грузить shared objects не интересует? Может, это лучше подходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:25:55 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinМогу ли я в java динамически загрузить (скомпилировать?) некий класс, который описан в неком файле, при том что он наследует от имеющихся в базе классов? Как называется эта технология. Мне нужно загрузить не данные экземпляра класса, а именно новый функционал. Хочу разделить код ядра и прикладного уровня. Ядро не меняем, а прикладные объекты меняем часто и перезагружаем их функционал из класса. Не очень понятно, если честно. Какая-то система плагинов или что? В принципе можно смотреть в сторону рефлекшна, если это то, что я понял из Вашего описания. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:28:54 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
reflections ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:31:41 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
уточняю. Например у меня в проекте есть класс А. Мне нужно динамически загрузить новый класс. Class B:A { function print(); }; Чтобы если я потом где-то в новом классе С напишу: X=new B; чтобы у меня создался класс B. Также мне может понадобиться перезагрузить уже загруженный класс, например класс А. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:38:47 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixinуточняю. Например у меня в проекте есть класс А. Мне нужно динамически загрузить новый класс. Class B:A { function print(); }; Чтобы если я потом где-то в новом классе С напишу: X=new B; чтобы у меня создался класс B. Также мне может понадобиться перезагрузить уже загруженный класс, например класс А. Опять непонятно... во-первых, "динамическая загрузка класса" и "X=new B;" несовместимы по определению (на то она и динамическая, что позволяет использовать еще неизвестный на стадии компиляции класс), во-вторых лучше опишите high-level design. То есть - что хотите получить . Какая конечная цель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 18:43:08 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Зашедший Опять непонятно... во-первых, "динамическая загрузка класса" и "X=new B;" несовместимы по определению (на то она и динамическая, что позволяет использовать еще неизвестный на стадии компиляции класс), во-вторых лучше опишите high-level design. То есть - что хотите получить . Какая конечная цель. Еще раз: Например у меня в проекте есть класс А. 1. Динамически загружаю: Class B:A { function print(); }; 2. Динамически загружаю: Class C:A { function print() {R=New B;} //Вот здесь должен создаться новый, загруженный класс b. }; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 19:14:15 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Зашедший Опять непонятно... во-первых, "динамическая загрузка класса" и "X=new B;" несовместимы по определению (на то она и динамическая, что позволяет использовать еще неизвестный на стадии компиляции класс), во-вторых лучше опишите high-level design. То есть - что хотите получить . Какая конечная цель. Еще раз: Например у меня в проекте есть класс А. 1. Динамически загружаю: Class B:A { function print(); }; 2. Динамически загружаю: Class C:A { function print() {R=New B;} //Вот здесь должен создаться новый, загруженный класс b. }; Очень рекомендую все-таки почитать Reflection. Кратко по сути: есть некий класс Class, воплощающий в себе метаинформацию о конкретном классе, его реализации. Он позволяет: - просматривать списки методов - вызывать методы по имени - создавать новые инстансы заранее неизвестного класса - менять содержимое полей и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 19:37:35 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Туториал, как всегда, находится здесь . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 19:40:52 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
- а чем Вас не устраивают интерфейсы? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:00:56 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
(0) о боже и здесь ты. ClassForName тебе нужен? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:25:38 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Поясняю еще раз суть. Я хочу узнать просто могу ли я вызвать метод по имени просто вот так x.print() А не так: x.callbyname("print") Т.е. позволяет ли такое java? Интерфейсы меня не устраивают, т.к. я не хочу менять ядро (базовый класс). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:29:20 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Интерфейсы меня не устраивают, т.к. я не хочу менять ядро (базовый класс). 1. что мешает базовому классу реализовывать общий с подгружаемыми классами интерфейс? 2. что мешает подгружаемым классам быть наследниками от базового класса? Fixin Я хочу узнать просто могу ли я вызвать метод по имени просто вот так x.print() А не так: x.callbyname("print") Т.е. позволяет ли такое java? - см. пример выше, по моему в нем видно, что позволяет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:33:30 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Kachalov 1. что мешает базовому классу реализовывать общий с подгружаемыми классами интерфейс? 2. что мешает подгружаемым классам быть наследниками от базового класса? Потому что, когда я разрабатываю базовый класс, я не знаю, что у объекта может появиться например метод print. Возможна ситуация, когда я обрабатываю список объектов класса Basic (базовый), и у тех, у которых есть метод Print (или у объектов определенного типа), я должен его вызвать этот метод. Я хочу чтобы код был максимально прост и fun, чтобы не напрягать программиста, который будет писать надстройку над ядром. Т.е. если он понял, что перед ним не Basic, а Printable, чтобы он мог вызвать метод этого объекта. Можно конечно пойти через преобразование типа (можно?) но не проще ли вызвать метод по имени? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:43:32 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Потому что, когда я разрабатываю базовый класс, я не знаю, что у объекта может появиться например метод print. - а как Вы "потом" узнаете что именно этот, неизвестый заранее метод, надо вызывать? На этот случай опытные товарищи уже посоветовали Вам Reflection API, который позволяет вызывать методы с заранее неизвестной сигнатурой. Fixin Возможна ситуация, когда я обрабатываю список объектов класса Basic (базовый), и у тех, у которых есть метод Print (или у объектов определенного типа), я должен его вызвать этот метод. - Reflection API Fixin Я хочу чтобы код был максимально прост и fun, чтобы не напрягать программиста, который будет писать надстройку над ядром. Т.е. если он понял, что перед ним не Basic, а Printable, чтобы он мог вызвать метод этого объекта. - интерфейсы. Можно без методов, а-ля java.io.Serialaizable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:51:24 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Окей. сложно ли выглядит вызов метода через reflection.api Есть ли у класса событие, которое возникает, когда вызывается неизвестный метод? Т.е. видите как просто можно написать: x.Print(), кстати Visual Basic так позволяет писать. А как это будет выглядеть в Рефлекшн x.callbyname("Print")??? Или все же x.GetMethod("Print")(); ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 20:57:46 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinПотому что, когда я разрабатываю базовый класс, я не знаю, что у объекта может появиться например метод print. что за бред. Так не проектируют. Наследование раширяет функциональность и сужает тип, ты не должен думать о тех методах, которые могут быть у наследников, т.к. это их инкапсулированная бизнеслогика. Если тебе нужен метод, но ты не знаешь его реализации - сделай класс абстрактным и сделай абстрактный метод, который будет реализовываться в наследниках по-своему... и никаких рефлекшенов не надо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 21:03:15 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
y3u FixinПотому что, когда я разрабатываю базовый класс, я не знаю, что у объекта может появиться например метод print. что за бред. Так не проектируют. Наследование раширяет функциональность и сужает тип, ты не должен думать о тех методах, которые могут быть у наследников, т.к. это их инкапсулированная бизнеслогика. Если тебе нужен метод, но ты не знаешь его реализации - сделай класс абстрактным и сделай абстрактный метод, который будет реализовываться в наследниках по-своему... и никаких рефлекшенов не надо Я понимаю, что в классическом ООП так не проектируют, я хочу узнать, возможен ли выход за рамки этого классического ООП в джава, ведь ничего этому не мешает - здесь виртуальная машина а не компилятор. Надеюсь, моя позиция понятна? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 21:05:22 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
возможен, но не нужен... почему бы тебе не сменить язык прграммирования? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 21:16:27 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinОкей. сложно ли выглядит вызов метода через reflection.api Есть ли у класса событие, которое возникает, когда вызывается неизвестный метод? Т.е. видите как просто можно написать: x.Print(), кстати Visual Basic так позволяет писать. А как это будет выглядеть в Рефлекшн x.callbyname("Print")??? Или все же x.GetMethod("Print")(); - документация (пакет java.lang.reflect) - примеры ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 21:24:50 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinОкей. сложно ли выглядит вызов метода через reflection.api Есть ли у класса событие, которое возникает, когда вызывается неизвестный метод? Т.е. видите как просто можно написать: x.Print(), кстати Visual Basic так позволяет писать. А как это будет выглядеть в Рефлекшн x.callbyname("Print")??? Или все же x.GetMethod("Print")(); ну я присоединюсь к предыдущим ораторам - почитайте таки reflection. В Java мона все методы найти любого класса простым итерейшн. 2. Как уже правильно сказали - забудьте о классах. Классы - ето имплементация. Дизайн - ето интерфейсы, классы их просто имплементируют. По хорошему у Вас не должно быть класса на котором Вы базируетесь, только интерфейсы, если конечно класс не имплементирует 82% Вашей функциональности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2007, 21:56:30 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinЯ понимаю, что в классическом ООП так не проектируют, я хочу узнать, возможен ли выход за рамки этого классического ООП в джава, ведь ничего этому не мешает - здесь виртуальная машина а не компилятор. Надеюсь, моя позиция понятна? С такими запросами вам сюда или сюда . Возможно, найдете еще какой-нибудь динамически типизированный язык под JVM. Сама Java, увы, для решения вашей задачи требует громоздкого синтаксиса Reflection, так что выбирайте - учить новый язык или набивать мозоли на пальцах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 00:03:56 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinПотому что, когда я разрабатываю базовый класс, я не знаю, что у объекта может появиться например метод print. Я понимаю, что в классическом ООП так не проектируют, я хочу узнать, возможен ли выход за рамки этого классического ООП в джава, ведь ничего этому не мешает - здесь виртуальная машина а не компилятор. Надеюсь, моя позиция понятна? 1) Очевидно, вам нужна динамическая компилляция . Её можно достигнуть путём приминения классов com.sun.tools.javac.Main из бибиотеки tools . Возможно это вам поможет. Будьте осторожны! SUN не гарантирует совместимость кода этих классов с новыми версиями JDK. И вообще, эта часть библиотек слабо документирована. 2) Попробуйте скриптовать новый функционал. По имеющейся у меня информации, Java 6 уже должна иметь встроенную поддержку скриптовых языков ( PHP, Ruby, JavaScript, Jython ). Насколько эта информация достоверна - не берусь судить. Поищите сами. Ключевое слово для поиска - ScriptEngineManager . 3) И всё-таки напоследок я, как и все коллеги призову вас вернутся в лоно истинной церкви (просто еще раз внимательно почитать про reflection ), ибо 99% всех задач, связанных с разработкой плагинов и расширений для некого "ядра" обеспечиваются именно этой опцией. Если-же ваши плагины настолько разнородны, что выделить базовый интерфейс невозможно - тогда возникает вопрос о целесообразности такого ядра. Успехов! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 21:10:40 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Не четал! Па сабжу: загрузчик классов свой написать. У Хорстмана во втором томе описано. Они там из БеДе грузят класс. Ток класс скомпилен должен быть в байт код. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 22:00:08 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
mayton 2) Попробуйте скриптовать новый функционал. По имеющейся у меня информации, Java 6 уже должна иметь встроенную поддержку скриптовых языков ( PHP, Ruby, JavaScript, Jython ). Насколько эта информация достоверна - не берусь судить. Поищите сами. Ключевое слово для поиска - ScriptEngineManager . Jython Уё! Сан решили включить в SDK то, что уже фиг знает сколько лет написано? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 22:02:24 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34381297&tid=2146315]: |
0ms |
get settings: |
21ms |
get forum list: |
30ms |
check forum access: |
8ms |
check topic access: |
8ms |
track hit: |
63ms |
get topic data: |
25ms |
get forum data: |
7ms |
get page messages: |
139ms |
get tp. blocked users: |
3ms |
| others: | 357ms |
| total: | 661ms |

| 0 / 0 |
