|
|
|
Можно ли в 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 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
А можно еще сделать так. interface InterfaceA { [// some methods] } interface InterfaceB [extends A] { void print(); } А в коде: if(x instabceof InterfaceB ) { ((InterfaceB)x).print(); } Все дело в том, что за гибкость рефлекшна приходится платить производительностью, поэтому не рекомендуется использовать его где попало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 22:48:48 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
SarinJython Уё! Сан решили включить в SDK то, что уже фиг знает сколько лет написано? Типичная политика софтверного гиганта ИМХО. По сабжу JScript работает! Только что попробовал на JDK 1.6.0. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Хех... А кто-то в форуме бил себя в грудь и говорил дескать Java!=JScript. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2007, 22:56:19 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
mayton Хех... А кто-то в форуме бил себя в грудь и говорил дескать Java!=JScript. Смотря что рассматривать под Java. Если как язык - так ничто в вашем посте не говорит об обратном ( Java != JScript). А то следуя вашей логике Java == Python, Java == Ruby, Java == Haskell... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2007, 11:22:52 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
LeonidvЕсли как язык - так ничто в вашем посте не говорит об обратном ( Java != JScript). Верно. Просто я хотел акцентировать внимание на том, что популярный слоган приобретает несколько иной смысл. Да Java!=JScript. Но может-ли Java являтся чем-то другим по отношению к JScript? Впрочем это оффтоп. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.03.2007, 11:35:51 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
K1RUHAА можно еще сделать так. interface InterfaceA { [// some methods] } interface InterfaceB [extends A] { void print(); } А в коде: if(x instabceof InterfaceB ) { ((InterfaceB)x).print(); } Все дело в том, что за гибкость рефлекшна приходится платить производительностью, поэтому не рекомендуется использовать его где попало. Гм, а динамическое преобразование типа в Java катит? Если да, то должен работать такой вот код: I=x.GetInterface(); //возращается интерфейс типа x if(x instabceof I ) { ((I)x).print(); } или так (через преобразование типа): I=x.GetType(); //возращается тип объекта x if(x instabceof I ) { ((I)x).print(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 18:31:53 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Для того, чтобы знать, какие методы интерфейса можно вызывать, надо чтобы интерфейс был известен на момент компиляции. Так что в Вашем случае - или получать ссылки на интерфейс не надо (т.к. толку от этого никакого), или можно проверять классы на имплементацию ими интерфейсов и приводить их к неким интерфейсам... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 18:53:47 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
ЗашедшийДля того, чтобы знать, какие методы интерфейса можно вызывать, надо чтобы интерфейс был известен на момент компиляции. Так что в Вашем случае - или получать ссылки на интерфейс не надо (т.к. толку от этого никакого), или можно проверять классы на имплементацию ими интерфейсов и приводить их к неким интерфейсам... Допустим я в базовом классе сделаю метод, который возвращает тип класса - GetType, а во всех наследниках его переопределять. Смогу ли я, как спрашивал выше, динамически привести ссылку к нужному типу, хранящемуся в переменной (т.е. преобразовать не к константному типу, а к типу из переменной)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 19:04:08 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin K1RUHAА можно еще сделать так. interface InterfaceA { [// some methods] } interface InterfaceB [extends A] { void print(); } А в коде: if(x instabceof InterfaceB ) { ((InterfaceB)x).print(); } Все дело в том, что за гибкость рефлекшна приходится платить производительностью, поэтому не рекомендуется использовать его где попало. Гм, а динамическое преобразование типа в Java катит? Если да, то должен работать такой вот код: I=x.GetInterface(); //возращается интерфейс типа x if(x instabceof I ) { ((I)x).print(); } или так (через преобразование типа): I=x.GetType(); //возращается тип объекта x if(x instabceof I ) { ((I)x).print(); } Не надо использовать объектно-ориентированный язык, как скриптовый! Если посмотреть в сторону паттернов ООД, то можно найти паттерн Command. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 19:25:02 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
K1RUHA Fixin K1RUHAА можно еще сделать так. interface InterfaceA { [// some methods] } interface InterfaceB [extends A] { void print(); } А в коде: if(x instabceof InterfaceB ) { ((InterfaceB)x).print(); } Все дело в том, что за гибкость рефлекшна приходится платить производительностью, поэтому не рекомендуется использовать его где попало. Гм, а динамическое преобразование типа в Java катит? Если да, то должен работать такой вот код: I=x.GetInterface(); //возращается интерфейс типа x if(x instabceof I ) { ((I)x).print(); } или так (через преобразование типа): I=x.GetType(); //возращается тип объекта x if(x instabceof I ) { ((I)x).print(); } Не надо использовать объектно-ориентированный язык, как скриптовый! Если посмотреть в сторону паттернов ООД, то можно найти паттерн Command. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ага: void execute(name) { if name="print" then print(); elseif name="run" then run() ... } ага, только зачем писать интерпретатор, если джава МОЖЕТ вызвать нужный метод (сама интерпретатор) и еще придется беспокоиться о параметрах, ведь у методов могут быть ПАРАМЕТРЫ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 19:42:35 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixinага, только зачем писать интерпретатор, если джава МОЖЕТ вызвать нужный метод (сама интерпретатор) и еще придется беспокоиться о параметрах, ведь у методов могут быть ПАРАМЕТРЫ Видите ли, Java - не интерпретатор в том виде, в котором Вы это воспринимаете. То есть у нее нет никаких исходных кодов, у нее есть скомпилированный код. Только скомпилирован он не для "железа", а для виртуальной машины. Если взять процессор, работающий как вирт.машина (т.н. Java-процессор) - то ровно тот же самый код замечательно будет исполняться на нем без всяких дополнительных заморочек. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 19:57:25 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Зашедший Fixinага, только зачем писать интерпретатор, если джава МОЖЕТ вызвать нужный метод (сама интерпретатор) и еще придется беспокоиться о параметрах, ведь у методов могут быть ПАРАМЕТРЫ Видите ли, Java - не интерпретатор в том виде, в котором Вы это воспринимаете. То есть у нее нет никаких исходных кодов, у нее есть скомпилированный код. Только скомпилирован он не для "железа", а для виртуальной машины. Если взять процессор, работающий как вирт.машина (т.н. Java-процессор) - то ровно тот же самый код замечательно будет исполняться на нем без всяких дополнительных заморочек. Вы хотите сказать, что виртуальная машина не знает, есть ли у объекта X метод print? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 20:04:31 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Знает, и для того чтобы вызвать этот метод можно использовать reflection, как и описали выше. Вопрос в другом, возможно вам вообще не нужен в описываемой ситуации reflection и можно обойтись стандартными приемами ООП. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 20:18:30 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
max_from_sumyЗнает, и для того чтобы вызвать этот метод можно использовать reflection, как и описали выше. Вопрос в другом, возможно вам вообще не нужен в описываемой ситуации reflection и можно обойтись стандартными приемами ООП. Вот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 20:27:30 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin max_from_sumyЗнает, и для того чтобы вызвать этот метод можно использовать reflection, как и описали выше. Вопрос в другом, возможно вам вообще не нужен в описываемой ситуации reflection и можно обойтись стандартными приемами ООП. Вот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? Зашедший 2 раза повторял, что не прокатит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 20:30:06 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinВот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? - Вам уже описали все возможные и разумные варианты: Reflection, интерфейсы, интерфейсы+Reflection - Вы хотите взять форум измором? Java язык жестко типизированый и о каких "динамических типах" Вы говорите не понятно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 21:15:35 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin. Приведите пожалуйста пример применения вашей системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.03.2007, 23:52:47 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Kachalov FixinВот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? - Вам уже описали все возможные и разумные варианты: Reflection, интерфейсы, интерфейсы+Reflection - Вы хотите взять форум измором? Java язык жестко типизированый и о каких "динамических типах" Вы говорите не понятно. Товарищ качалов. я хочу понять: 1. возможно ли хранить информацию о типе в переменной. 2. Можно ли привести один тип к другому, если другой тип задается не в коде программы, а хранится в переменной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 18:47:25 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Kachalov FixinВот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? - Вам уже описали все возможные и разумные варианты: Reflection, интерфейсы, интерфейсы+Reflection - Вы хотите взять форум измором? Java язык жестко типизированый и о каких "динамических типах" Вы говорите не понятно. Товарищ качалов. я хочу понять: 1. возможно ли хранить информацию о типе в переменной. 2. Можно ли привести один тип к другому, если другой тип задается не в коде программы, а хранится в переменной. 1. Да - cм. Class 2. Нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 19:01:45 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Kachalov FixinВот и я прошу отбросить понты и предлагаю вариант - динамическое преобразование к динамическому типу. Такое прокатит? - Вам уже описали все возможные и разумные варианты: Reflection, интерфейсы, интерфейсы+Reflection - Вы хотите взять форум измором? Java язык жестко типизированый и о каких "динамических типах" Вы говорите не понятно. Товарищ качалов. я хочу понять: 1. возможно ли хранить информацию о типе в переменной. 2. Можно ли привести один тип к другому, если другой тип задается не в коде программы, а хранится в переменной. 1. Возможно или нет - не знаю, но она там хранится самой Java - и сделать с етим ничего нельзя. Никаких лишних телодвижений для етого делать не надо, токо дерайв от Object. 2. До лампочки где он хранится или описывается. Если класс дерайвед от другого, то он приведется, или приведется к интерфейсу который класс имплементировал. К способу хранения - "динамически" или нет ето отношения не имеет. В рантайм вывалится еррор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2007, 23:32:19 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
mayton SarinJython Уё! Сан решили включить в SDK то, что уже фиг знает сколько лет написано? Типичная политика софтверного гиганта ИМХО. По сабжу JScript работает! Только что попробовал на JDK 1.6.0. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Хех... А кто-то в форуме бил себя в грудь и говорил дескать Java!=JScript. Более того возможно импортировать классы Java в js Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 09:12:06 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Товарищ качалов. я хочу понять: 1. возможно ли хранить информацию о типе в переменной. 2. Можно ли привести один тип к другому, если другой тип задается не в коде программы, а хранится в переменной. "Товарищ" Fixin. Отвечаю по пунктам: 1. Да, можно, в переменной типа java.lang.Class [иными словами: Reflection API ] 2. Да, можно, если приводимый объект принадлежит к типу который является наследником от того типа к которому производится приведение (как уже отметил выше A. Fig Lee любой объект можно привести к типу java.lang.Object) [иными словами: наследование, интерфейсы ] - мне кажется Вы явно не хотите слышать ответы на свои вопросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 12:57:50 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Kachalov Fixin Товарищ качалов. я хочу понять: 1. возможно ли хранить информацию о типе в переменной. 2. Можно ли привести один тип к другому, если другой тип задается не в коде программы, а хранится в переменной. "Товарищ" Fixin. Отвечаю по пунктам: 1. Да, можно, в переменной типа java.lang.Class [иными словами: Reflection API ] 2. Да, можно, если приводимый объект принадлежит к типу который является наследником от того типа к которому производится приведение (как уже отметил выше A. Fig Lee любой объект можно привести к типу java.lang.Object) [иными словами: наследование, интерфейсы ] - мне кажется Вы явно не хотите слышать ответы на свои вопросы. По пункту 2 - нельзя. В том смысле, в котором Fixin спрашивает. Если на момент компиляции тип неизвестен, то привести к нему использованием () нельзя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 13:05:49 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Поясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 13:09:40 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. - чего хочет Fixin он, по моему, сам не знает :) Главное что он не хочет учиться. Приведеную Вами конструкцию он вполне мог реализовать через Reflection: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:26:19 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
KachalovПриведеную Вами конструкцию он вполне мог реализовать через Reflection: Мог. Но цель его не в этом :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:30:31 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
а где и в каком СДК я видел метод cast... черт, под рукой только 1,4... там такого вроде нету, но где-то я точно видал... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 14:40:11 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. Не-а, не хочет. Он сам не знает, что он хочет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 17:47:57 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. Вот именно этого я и хочу, правильно. Странно, что так не бывает, потому что байт-код это может... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:18:37 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. Вот именно этого я и хочу, правильно. Странно, что так не бывает, потому что байт-код это может... Байт код возможно и умеет управлять памятью, но Java была задумана для того, чтобы этого не мог делать программист! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:22:59 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. Вот именно этого я и хочу, правильно. Странно, что так не бывает, потому что байт-код это может... Потому что это будет по сути тем же самым рефлекшном и вся строгая типизация полетит к щьорту - ждите море рантаймовых ошибок, которые придется ловить по всем местам. Кроме того, это будет работать сильно медленнее (на порядки). И наконец - неясно, зачем вообще что-то к чему-то тогда приводить, ежели метод все равно вызывается по имени. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:25:11 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Патестел. Вызов метода при раннем связывании работает примерно в 4 тысячи раз быстрее, чем при вызове "па имини с типо привидением". "Такой хоккей нам не нужен"(с) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:33:18 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
ЗашедшийИ наконец - неясно, зачем вообще что-то к чему-то тогда приводить, ежели метод все равно вызывается по имени. Надо перевести ветку на английский и отправить GoF. Может это майнстрим в архитектуре, пускай книжку по этому напишут :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2007, 18:35:30 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin ЗашедшийДля того, чтобы знать, какие методы интерфейса можно вызывать, надо чтобы интерфейс был известен на момент компиляции. Так что в Вашем случае - или получать ссылки на интерфейс не надо (т.к. толку от этого никакого), или можно проверять классы на имплементацию ими интерфейсов и приводить их к неким интерфейсам... Допустим я в базовом классе сделаю метод, который возвращает тип класса - GetType, а во всех наследниках его переопределять. Смогу ли я, как спрашивал выше, динамически привести ссылку к нужному типу, хранящемуся в переменной (т.е. преобразовать не к константному типу, а к типу из переменной)? осилил ветку с трудом. окромя баянов: отношение между классами в динамике instanceof в динамике кажется через 16 вызовов через reflection JVM создаёт спец класс для ускорения этого дела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.03.2007, 02:26:09 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinМогу ли я в java динамически загрузить (скомпилировать?) некий класс, который описан в неком файле, при том что он наследует от имеющихся в базе классов? Как называется эта технология. Мне нужно загрузить не данные экземпляра класса, а именно новый функционал.А как ты это на бэйсике делаешь? Приведи пример. Fixin здесь виртуальная машина а не компилятор. Надеюсь, моя позиция понятна?Здесь именно компилятор со статических типов. Чем ты недоволен? Пиши на бэйсике ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.03.2007, 11:37:38 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Зашедший Fixin ЗашедшийПоясню: есть некий класс Код: plaintext 1. 2. 3. Он хочет, чтобы в программе (которая не имеет в момент компиляции никаких данных об этом классе) можно было написать: Код: plaintext 1. 2. Вот именно этого я и хочу, правильно. Странно, что так не бывает, потому что байт-код это может... Потому что это будет по сути тем же самым рефлекшном и вся строгая типизация полетит к щьорту - ждите море рантаймовых ошибок, которые придется ловить по всем местам. Кроме того, это будет работать сильно медленнее (на порядки). И наконец - неясно, зачем вообще что-то к чему-то тогда приводить, ежели метод все равно вызывается по имени. Возможно автор удовлетворится подобным: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 11:02:35 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
или таким :) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 11:04:21 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
NotGonnaGetUs Возможно автор удовлетворится подобным: Не-а... он хочет через точку вызывать методы класса, которые еще не известны на момент компиляции. А в указанном коде <T> вообще смысла не имеет, бо вызывать hello() можно простым приведением к UnknownClass. Хотя в качестве легкого издевательства принимается :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 12:54:07 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Гению 1С с нечеловеческими достижениями, проектами и гениальными идеями в области 1С и etc похоже надо вот это как в BASIC Только не уверен что это поможет написать альтернативу 1С ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 14:45:16 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Michael PonomarevГению 1С с нечеловеческими достижениями, проектами и гениальными идеями в области 1С и etc похоже надо вот это как в BASIC Я не понял, в Microsfot что ли вообще олбанские парубки статьи пишут? Или времени проверять ошибки нет, так сильно денег хочется? основополагающим принципом было использовани я технологии раннего связывания.что является одной их характерны й черт современных между идентификатором, используемым коде программы,(в общем случае любым программным компонентом: переменной, процедурой, модулем, приложением и т. д. скобка не закрыта понимается связывание к процессе компиляциикомпоновки испо льные мого модуля определяется каки к объекты будет нужны Афтар дибил? Дальше я ниасилил. Я еще понимаю, когда на форуме людям некогда грамотно выражаться и спеллчекать. Но чтобы microsoft такую муть у себя на сайте выкладывал!! Я был об этой конторе более высокого мнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2007, 21:44:32 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Афтар дибил? Дальше я ниасилил. Я еще понимаю, когда на форуме людям некогда грамотно выражаться и спеллчекать. Но чтобы microsoft такую муть у себя на сайте выкладывал!! Я был об этой конторе более высокого мнения Следите за выражениями уважаемый. Если вы привыкли ходить на костылях, не называйте бегающих и прыгающих индивидумов инвалидами, пожалуйста. ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 20:35:17 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinЕсли вы привыкли ходить на костылях, не называйте бегающих и прыгающих индивидумов инвалидами, пожалуйста. ;-) Теперь безграмотность аффтара - показатель "творческого полета мысли"? А те, кто оформляет официальные докуметы и вычищает из текста все баги - "ходящий на костылях"? ЖЖош, умник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2007, 21:00:07 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Зашедший FixinЕсли вы привыкли ходить на костылях, не называйте бегающих и прыгающих индивидумов инвалидами, пожалуйста. ;-) Теперь безграмотность аффтара - показатель "творческого полета мысли"? А те, кто оформляет официальные докуметы и вычищает из текста все баги - "ходящий на костылях"? ЖЖош, умник. Хорошо, обоснуй мне, почему я не могу выполнить динамическое приведение к динамическому типу в Джава. Слушаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 10:34:14 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
FixinХорошо, обоснуй мне, почему я не могу выполнить динамическое приведение к динамическому типу в Джава. Слушаю. встречный вопрос: зачем вам это ? варианты: 1. вызвать метод zzz класса XXX к потомоку которого динамически привели ссылку ... вывод: приводите к ссылку к XXX 2. Вызвать метод имя которого в строке www вывод: MethodUtils или Reflection ещё ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 11:02:13 |
|
||
|
Можно ли в java загрузить функционал класса из файла.
|
|||
|---|---|---|---|
|
#18+
Fixin Зашедший FixinЕсли вы привыкли ходить на костылях, не называйте бегающих и прыгающих индивидумов инвалидами, пожалуйста. ;-) Теперь безграмотность аффтара - показатель "творческого полета мысли"? А те, кто оформляет официальные докуметы и вычищает из текста все баги - "ходящий на костылях"? ЖЖош, умник. Хорошо, обоснуй мне, почему я не могу выполнить динамическое приведение к динамическому типу в Джава. Слушаю. Чукча не читатель, чукча писатель? Советую тебе перечитать внимательно пост Ghost Rider-а, на который ты так пафосно написал отвеД. И понять, о чем он вообще пищет. Неудивительно, что с такими слабыми навыками понимать печатное слово тяжело усвоить простые понятия вроде типизации и отличий раннего и позднего связываний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2007, 12:23:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=59&tid=2146315]: |
0ms |
get settings: |
16ms |
get forum list: |
24ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
49ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
126ms |
get tp. blocked users: |
3ms |
| others: | 278ms |
| total: | 528ms |

| 0 / 0 |
