![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Чисто философский вопрос. Возможно ли сделать программу, которую можно дописывать новыми классами, без вмешательства в основной код.
Ну, например, в проекте имеется подробно описанный интерфейс. Пользователь (знающий Java естественно, на некотором уровне) пишет новый класс имплементирующий этот интерфейс, собирает его, и кладет класс в нужную директорию. При запуске программа читает директорию и добавляет в меню своего GUI данный класс, с тем, чтобы пользователь мог радоваться самостоятельно заданной функциональности. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
можно, и многие так и делают. Ещё можно прикрутить к своей программе какой нибудь скриптовый язык, например java-script и пусть пользователи пишут скрипты - обычно так и делают для пользователей.
Если пользователи - программисты, то пусть имплементрируют интерфэйс или абстрактный класс. Один подход не исключает другого. Первое можно использовать как надстройку над вторым. |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
Тогда вопрос, а как это делается? Как создается объект класса, имя которого есть в данных, но в основном коде оно не прописано? -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| jk1 |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1168 Регистрация: 17.10.2008 Где: Санкт-Петербург Репутация: 40 Всего: 75 |
Делается очень просто, вот небольшой пример. Пусть у нас есть класс edu.modules.main, который занимается тем, что ищет в директории ./src/edu/plugins классы-плагины, количество и названия которых на этапе компиляции не известны. Вот одна из возможных реализаций
Class.forName(...).newInstance() позволит нам получить класс по полному имени и создать его экземпляр. Чтобы после этого использовать функциональность класса необходимо, чтобы все классы-плагины реализовывали интерфейс или абстрактный класс. Чтобы не писать лишнего, в примере использован интерфейс Runnable. Теперь напишем пару простых плагинов
Если классы расположены в правильном месте, то при запуске метод run() каждого класса-плагина будет выполнен. -------------------- Opinions are like assholes — everybody has one |
||||||
|
|||||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 5 Всего: 34 |
jk1, спасибо. Поэкспериментирую с этим делом и доложу
-------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| aleksandy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 260 Регистрация: 17.12.2006 Репутация: 4 Всего: 5 |
||||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |