![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: 1 Всего: 1 |
Хочу чтобы в яве была возможность создавать абстрактные статические методы...
столкнулся с такой задачей вот.. конечно может я неправильно спроектировал архитектуру приложения, но все же вот задача: есть классы C1, C2, ..., Cn которые наследуют абстрактный класс
и переопределяют метод foo(). всё тривиально. Но, кроме того, для каждого из класса Cn нужно сделать статические методы configure которые конфигурирут статические поля каждого из Cn, с точки зрения ООП метод configure обладает свойствами полиморфизма, но все же он статический, и поэтому его нельзя сделать абстрактным, что очень жаль... учитывая, что множество Cn является мастабируемым, то использование методов configure для каждого класса Cn возможно при знании о типе этого класса... в качестве разбушевавшейся фантазии - у меня возникла нереальная мысль - а что бы если бы существовали абстрактные статические методы... хочу услышать любую критику на это. |
|||
|
||||
| allex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 5.9.2005 Репутация: нет Всего: нет |
А кто будет вызывать эти методы configure? Если он знает класс, для которого этот метод надо вызвать, то и без абстрактного метода вызовет. Если не знает - всё равно вызвать не сможет.
Или путем определения абстрактного статического метода Вы хотите указать, что все наследники должны определить configure? А что им мешает использовать другой способ конфигурации статических полей? Общий способ нужен только для того, чтобы дать клиенту возможность обращаться одинаково (полиморфно) со всеми Cn. Еще раз спрошу - кто клиент? |
|||
|
||||
| ALKS |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 22.3.2006 Репутация: 1 Всего: 11 |
а блок статической инициализация не сможет помочь?
|
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 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. |
|||
|
||||
| UnicornMirage |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: 1 Всего: 1 |
скорее всего использование "желаемого" статического абстрактного метода связано с наложением правил создания классов Cn - тоесть хотелось бы указать программисту обязательно создавать данный static метод configure для текущего класса, т.к. у всего множества этих классов предполагается некий общий статический контекст.. Если бы задача не была бы связана с статическим контекстом - все было бы просто - компилятор заставлял бы переопределять все указанные абстрактные методы.. попытаюсь описать задачу свою математически чтобы было понятно что я хотел сказать: есть множество классов A = { C1, C2, ..., Cn } каждый класс Ci - есть тоже множество - множество инстанций данного класса так вот, все элементы множества A - должны реализовать общий статический метод configure - который различается реализацией для каждого из классов. ------------- метод configure задает во время выполнения программы некоторые статические правила для всех инстанций класса Ci в общем постарался объяснить свою задачу, как мог подробнее... |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 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. |
|||
|
||||
| UnicornMirage |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 138 Регистрация: 15.11.2005 Репутация: 1 Всего: 1 |
Вы имели ввиду под синглетоном фабрику, которая будет создавать эти объекты C1, C2,...,Cn? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Можно так, а можно создать класс Configuration который будет хранить конфигурацию, а у него уже определить абстрактный метод configure(), c нужными параметрами. -------------------- 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. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |