powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как узнать имя класса, статический метод которого вызван из родителя
13 сообщений из 13, страница 1 из 1
Как узнать имя класса, статический метод которого вызван из родителя
    #34226357
Aqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пожалуйста, подскажите как лучше решить такую проблему:
Есть класс Entity, у него есть наследники (например, Agreement). Каждому наследнику соответствует табличка в БД (в частном случае) или в другом хранилище.
У родителя есть статический метод Query, смысл которого - вернуть список объектов-детей, соответствующих указанному условию.
Т.е. хочется написать что-то вида:
AgreementList a = Agreement.Query(...);
Каждый элемент AgreementList - это должен быть объект класса Agreement.

Проблема в том, что метод Query должен быть статическим, чтобы перед каждым его использованием не создавать по сути ненужный объект Agreement. Но в этом случае из метода Query не получается определить имя класса (в примере - Agreement), по отношению к которому он вызван.

Какие решения существуют в данной ситуации?
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226380
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Классиков надо читать! Хорстмана, например.
Код: plaintext
1.
2.
3.
        Throwable t =  new  Throwable();
        StackTraceElement[] st = t.getStackTrace();
        String className = st[ 0 ].getClassName();
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226386
Йогурт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а зачем это надо?
это вообще-то неправильно
и, есть подозрение, что Agreement.equery() все равно будет преобразован компиллятором в Entity.query()
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226390
Йогурт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗашедшийКлассиков надо читать! Хорстмана, например.
Код: plaintext
1.
2.
3.
        Throwable t =  new  Throwable();
        StackTraceElement[] st = t.getStackTrace();
        String className = st[ 0 ].getClassName();



что это даст?
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226396
Aqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йогурта зачем это надо?
это вообще-то неправильно
и, есть подозрение, что Agreement.equery() все равно будет преобразован компиллятором в Entity.query()
надо иметь возможность получить список объектов, соответствующих указанному условию. Можно, конечно, имя класса передавать явно в виде параметра (как строку), но Agreement.Query(...) выглядит гораздо удобнее, чем Query("имя_пакета.Agreement", ...)
И почему же Вы считаете, что это неправильно?
Иметь метод load у Agreement, который на самом деле наследуется от Entity и загружает данные в объект из БД правильно, а вот иметь аналогичный метод, но который возвращает список - неправильно.
Тут на самом деле проблема в том, что все работает, если метод Query не статический, но тогда приходится писать что-то вида:
Agreement q = new Agreement();
q.Query(...);

а вот Agreement q = new Agreement(); и не хочется писать каждый раз, когда нужно получить список объектов, да и зачем? просто потому, что больше никак имя класса не узнать из статического метода?
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226410
Йогурт
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет

вариант только написать аналогичный метод с такой же сигнатурой для всех потомков

хотя проблема все равно странная какая-то
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226426
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
йогуртнеправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет

вариант только написать аналогичный метод с такой же сигнатурой для всех потомков

хотя проблема все равно странная какая-то
Согласен, сначала неправильно понял вопрос.
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226539
Aqwerty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йогуртнеправильно, потому что статический метод принадлежит строго определенному классу, и наследование на такое положение вещей не влияет

вариант только написать аналогичный метод с такой же сигнатурой для всех потомков

хотя проблема все равно странная какая-то
в чем странность?
1. моделируем Java-объектами таблицы БД
2. код загрузки/сохранения данных в объект однотипный для всех классов, представляющих оьъекты БД, т.е. методы insert,update,delete,select одинаковые
3. хочу иметь метод, возвращающий список объектов по указанному условию, НО не хочу каждый раз создавать экземпляр класса только для того чтобы вызвать один метод. Точно также как никто не хочет перед вызовом, например, функции sin создавать экземпляр класса, в котором она определена.

Так что никакой странности не вижу. Если Вам понятна задача, то конкретно укажите в чем странность, может действительно надо посмотреть иначе и будет другое решение.
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226546
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, у вас есть подклассы, которые создаются по определенному условию (БД, это наверное все-таки частности). Не пробовали смотреть в сторону абстрактной фабрики? Правда, похоже, придется делать преобразование (Agreement) Agrement.Query().get(i).
А вообще, может вам Hibernate сможет помочь (или какая другая ORM)?
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226548
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Описался.
Код: plaintext
1.
Agreement a = Entity.Query().get(i)
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226773
ахха
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗашедшийКлассиков надо читать! Хорстмана, например.
Код: plaintext
1.
2.
3.
        Throwable t =  new  Throwable();
        StackTraceElement[] st = t.getStackTrace();
        String className = st[ 0 ].getClassName();

И чо - работает? Или все же throw надо делать?
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34226831
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
see the followed DDD&ORM patterns: Repository, Query object, Data Mapper. Also review the Hibernate documentation
...
Рейтинг: 0 / 0
Как узнать имя класса, статический метод которого вызван из родителя
    #34227670
Зашедший
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ахха ЗашедшийКлассиков надо читать! Хорстмана, например.
Код: plaintext
1.
2.
3.
        Throwable t =  new  Throwable();
        StackTraceElement[] st = t.getStackTrace();
        String className = st[ 0 ].getClassName();

И чо - работает? Или все же throw надо делать?
Работает, возвращает имя класса, в котором метод реализован - но это не то, что надо. Не дочитал текст задачи :(
З.Ы. Никаких throw здесь делать не надо!
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как узнать имя класса, статический метод которого вызван из родителя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]