![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Добрый день !
возникла такая задача - требуется в уже существующий класс - добавить новые поля и методы ! Каким образом это можно сделать ? к примеру через Reflect api ? объясню на примере - есть сторонняя библиотека - в которой есть простые java классы - набор приват полей и get и set методы для них. по этим полям создается определенного рода запрос (тут важно именно имя поля ) так вот хочется изменить этот запрос - изменив - добавив поля в этот класс . Фактически что хочу получить : будет метод который будет добавлять поля и их значение в класс setFieldName(Field , value) ; если можно пример !
как добавить в такой класс поле id Integer и get и set методы ? как добавить в такой класс поле value String и get и set методы ? Мне нужно создать класс - добавить в него новые методы , заполнить значения и отправить его дальше. Это сообщение отредактировал(а) Atum - 30.1.2013, 15:51 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На лету в уже загруженный класс, ничего не добавишь (ну разве что в режиме дебага). А при загрузке класса можно воспользоваться Javassist и модифицировать его. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Atum |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
Не на лету - но в рантайме ... получить сначала Как то так ? Class clazz = Test.class; и потом добавить ему : clazz.addField("id"); clazz.addField("value"); аналогично Method get и set для поля Field = id и для value . потом присвоить значения полям . и потом сделать новый Инстанс этого класса Test! такой алгоритм . Это сообщение отредактировал(а) Atum - 30.1.2013, 16:48 |
||||
|
|||||
jk1 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
... работать в JVM не будет. Попробуйте поставить себя на место JVM и разрешить все возможные последствия такого вмешательства. Про reflection в этой задаче можно сразу забыть. Либо это инструментирование средствами javassict/cglib, либо JRebel -------------------- Opinions are like assholes — everybody has one |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А имена классов которые надо модифицировать известны заранее? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
Atum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 3.10.2008 Репутация: нет Всего: нет |
||||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Тогда создаешь свой класслоадер, которым при старте загружаешь классы. Получаешь из них информацию которая тебе нужна (имена полей и т.п.).
А потому же при загрузке дефолтным класслоадером будешь модифицировать классы Javassist-ом на основе ранее собранной инфы. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |