Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> abstract static методы, немного помечтать... 
:(
    Опции темы
UnicornMirage
Дата 21.5.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: 1
Всего: 1



Хочу чтобы в яве была возможность создавать абстрактные статические методы...
столкнулся с такой задачей вот..
конечно может я неправильно спроектировал архитектуру приложения, но все же вот задача:

есть классы

C1, C2, ..., Cn 


которые наследуют абстрактный класс
Код

abstract class AbstractC {
abstract void foo();
}



и переопределяют метод foo(). всё тривиально.

Но, кроме того, для каждого из класса Cn нужно сделать статические методы configure которые конфигурирут статические поля каждого из Cn,

с точки зрения ООП метод configure обладает свойствами полиморфизма, но все же он статический, и поэтому его нельзя сделать абстрактным, что очень жаль... smile

учитывая, что множество Cn является мастабируемым, то использование методов configure для каждого класса Cn возможно при знании о типе этого класса...

в качестве разбушевавшейся фантазии - у меня возникла нереальная мысль - а что бы если бы существовали абстрактные статические методы... smile
хочу услышать любую критику на это. 
PM MAIL   Вверх
allex
Дата 21.5.2006, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 5.9.2005

Репутация: нет
Всего: нет



А кто будет вызывать эти методы configure? Если он знает класс, для которого этот метод надо вызвать, то и без абстрактного метода вызовет. Если не знает - всё равно вызвать не сможет.
Или путем определения абстрактного статического метода Вы хотите указать, что все наследники должны определить configure? А что им мешает использовать другой способ конфигурации статических полей? Общий способ нужен только для того, чтобы дать клиенту возможность обращаться одинаково (полиморфно) со всеми Cn. Еще раз спрошу - кто клиент? 
PM MAIL   Вверх
ALKS
Дата 21.5.2006, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 354
Регистрация: 22.3.2006

Репутация: 1
Всего: 11



а блок статической инициализация не сможет помочь? 
PM   Вверх
LSD
Дата 21.5.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(UnicornMirage @  21.5.2006,  19:20 Найти цитируемый пост)
в качестве разбушевавшейся фантазии - у меня возникла нереальная мысль - а что бы если бы существовали абстрактные статические методы... 
хочу услышать любую критику на это.

И как ты себе это представляешь? Не статический метод вызывается для определенного объекта, и соответсвенно во время исполнения может быть определено тип объекта, и вызван правильный метод (а компилятор заботится, чтобы этот метод был определен в классе).
Со статическими методами все не так, они вызываются по имени класса, т.е. связываение происходит во время компиляции, поэтому соответвенно никаких виртуальных методов тут не может быть.

А по поводу задачи, замени статические поля и методы на синглетон. 


--------------------
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.
PM MAIL WWW   Вверх
UnicornMirage
Дата 21.5.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: 1
Всего: 1



Цитата

А кто будет вызывать эти методы configure?
...
кто клиент?


Цитата

А по поводу задачи, замени статические поля и методы на синглетон.  


скорее всего использование "желаемого" статического абстрактного метода связано с наложением правил создания классов Cn - тоесть хотелось бы указать программисту обязательно создавать данный static метод configure для текущего класса, т.к. у всего множества этих классов предполагается некий общий статический контекст.. Если бы задача не была бы связана с статическим контекстом - все было бы просто - компилятор заставлял бы переопределять все указанные абстрактные методы..

попытаюсь описать задачу свою математически чтобы было понятно что я хотел сказать:

есть множество классов A = { C1, C2, ..., Cn }

каждый класс Ci - есть тоже множество - множество инстанций данного класса

так вот, все элементы множества A - должны реализовать общий статический метод configure - который различается реализацией для каждого из классов.
-------------

метод configure задает во время выполнения программы некоторые статические правила для всех инстанций класса Ci

в общем постарался объяснить свою задачу, как мог подробнее... smile
 
PM MAIL   Вверх
LSD
Дата 22.5.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
UnicornMirage
Дата 24.5.2006, 04:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 138
Регистрация: 15.11.2005

Репутация: 1
Всего: 1



Цитата

А по поводу задачи, замени статические поля и методы на синглетон.  

Вы имели ввиду под синглетоном фабрику, которая будет создавать эти объекты C1, C2,...,Cn? 
PM MAIL   Вверх
LSD
Дата 28.5.2006, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(UnicornMirage @  24.5.2006,  05:45 Найти цитируемый пост)
Вы имели ввиду под синглетоном фабрику, которая будет создавать эти объекты C1, C2,...,Cn?

Можно так, а можно создать класс 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.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0515 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.