
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
26.12.2006, 21:30:27
|
|||
|---|---|---|---|
|
|||
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
Пожалуйста, подскажите как лучше решить такую проблему: Есть класс Entity, у него есть наследники (например, Agreement). Каждому наследнику соответствует табличка в БД (в частном случае) или в другом хранилище. У родителя есть статический метод Query, смысл которого - вернуть список объектов-детей, соответствующих указанному условию. Т.е. хочется написать что-то вида: AgreementList a = Agreement.Query(...); Каждый элемент AgreementList - это должен быть объект класса Agreement. Проблема в том, что метод Query должен быть статическим, чтобы перед каждым его использованием не создавать по сути ненужный объект Agreement. Но в этом случае из метода Query не получается определить имя класса (в примере - Agreement), по отношению к которому он вызван. Какие решения существуют в данной ситуации? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 21:50:23
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
Классиков надо читать! Хорстмана, например. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 21:55:37
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
а зачем это надо? это вообще-то неправильно и, есть подозрение, что Agreement.equery() все равно будет преобразован компиллятором в Entity.query() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 21:56:52
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
ЗашедшийКлассиков надо читать! Хорстмана, например. Код: plaintext 1. 2. 3. что это даст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 22:05:01
|
|||
|---|---|---|---|
|
|||
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
йогурта зачем это надо? это вообще-то неправильно и, есть подозрение, что Agreement.equery() все равно будет преобразован компиллятором в Entity.query() надо иметь возможность получить список объектов, соответствующих указанному условию. Можно, конечно, имя класса передавать явно в виде параметра (как строку), но Agreement.Query(...) выглядит гораздо удобнее, чем Query("имя_пакета.Agreement", ...) И почему же Вы считаете, что это неправильно? Иметь метод load у Agreement, который на самом деле наследуется от Entity и загружает данные в объект из БД правильно, а вот иметь аналогичный метод, но который возвращает список - неправильно. Тут на самом деле проблема в том, что все работает, если метод Query не статический, но тогда приходится писать что-то вида: Agreement q = new Agreement(); q.Query(...); а вот Agreement q = new Agreement(); и не хочется писать каждый раз, когда нужно получить список объектов, да и зачем? просто потому, что больше никак имя класса не узнать из статического метода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 22:14:38
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
неправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет вариант только написать аналогичный метод с такой же сигнатурой для всех потомков хотя проблема все равно странная какая-то ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
26.12.2006, 22:31:11
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
йогуртнеправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет вариант только написать аналогичный метод с такой же сигнатурой для всех потомков хотя проблема все равно странная какая-то Согласен, сначала неправильно понял вопрос. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 01:24:10
|
|||
|---|---|---|---|
|
|||
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
йогуртнеправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет вариант только написать аналогичный метод с такой же сигнатурой для всех потомков хотя проблема все равно странная какая-то в чем странность? 1. моделируем Java-объектами таблицы БД 2. код загрузки/сохранения данных в объект однотипный для всех классов, представляющих оьъекты БД, т.е. методы insert,update,delete,select одинаковые 3. хочу иметь метод, возвращающий список объектов по указанному условию, НО не хочу каждый раз создавать экземпляр класса только для того чтобы вызвать один метод. Точно также как никто не хочет перед вызовом, например, функции sin создавать экземпляр класса, в котором она определена. Так что никакой странности не вижу. Если Вам понятна задача, то конкретно укажите в чем странность, может действительно надо посмотреть иначе и будет другое решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 01:50:12
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
Насколько я понял, у вас есть подклассы, которые создаются по определенному условию (БД, это наверное все-таки частности). Не пробовали смотреть в сторону абстрактной фабрики? Правда, похоже, придется делать преобразование (Agreement) Agrement.Query().get(i). А вообще, может вам Hibernate сможет помочь (или какая другая ORM)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 01:51:43
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
Описался. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 09:10:52
|
|||
|---|---|---|---|
|
|||
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
ЗашедшийКлассиков надо читать! Хорстмана, например. Код: plaintext 1. 2. 3. И чо - работает? Или все же throw надо делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 09:37:23
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
see the followed DDD&ORM patterns: Repository, Query object, Data Mapper. Also review the Hibernate documentation ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
27.12.2006, 13:01:53
|
|||
|---|---|---|---|
Как узнать имя класса, статический метод которого вызван из родителя |
|||
|
#18+
ахха ЗашедшийКлассиков надо читать! Хорстмана, например. Код: plaintext 1. 2. 3. И чо - работает? Или все же throw надо делать? Работает, возвращает имя класса, в котором метод реализован - но это не то, что надо. Не дочитал текст задачи :( З.Ы. Никаких throw здесь делать не надо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=59&tablet=1&tid=2147082]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
17ms |
get forum data: |
5ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
| others: | 305ms |
| total: | 486ms |

| 0 / 0 |
