powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Generic параметризованный класс.
25 сообщений из 28, страница 1 из 2
Generic параметризованный класс.
    #35508156
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 class  gtest<T> {

      public  T somLogic(){
     // вот в этом месте позарез нужно узнать тип параметризованного класса
     // типа T.class
     }
}
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508299
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Erasure можно обойти только так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 class  gtest<T> {

      public  T somLogic(){
     // вот в этом месте позарез нужно узнать тип параметризованного класса
     // типа T.class
              Class  tclass = whatIsMyGenericType();
     }

         Class  whatIsMyGenericType(){
               return   null ;
        }
}



 class  MyTypeGTest  extends  gtest<MyType>
{
         Class  whatIsMyGenericType(){
              return  ReflectionAPI.findTheGenericTypeCode(getClass());
             //Хотя с тем же успехом здесь можно просто вернуть MyType и не извращатся
        }
}


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
 class  gtest<T> {

      public  T somLogic(T instace){
     // вот в этом месте позарез нужно узнать тип параметризованного класса
     // типа T.class
             instace.getClass();
     }
}

Код: plaintext
1.
2.
3.
4.
5.
6.
 class  gtest<T> {

      public  T somLogic( Class <T> clazz){
     // вот в этом месте позарез нужно узнать тип параметризованного класса
     // типа T.class
     }
}
Иначе, ну никак. Его там просто нет.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508523
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вчера перерыл кучу док, кажется что это достаточно реальная задача, а решения пока не нашел.

Суть дела: пишу DAO для Hibernate. Было бы круто написать одно DAO для всех классов, стандартная логика добавить/удалить/ ... функционал для пейджинга и т.п.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
 class  DAO<hbmObject>{
   void  create (hbmObject){...}
   void  load ( Long  id){
  // вот тут как раз и нужен класс объекта 
  session.load(some. class , id)
}

}
в дальнейшем все равно придется для некоторых объектов экстендить дао, но для стандартных функций думал обойдусь одним классом. Единственный вариант который я пока вижу в load передавать инстанс класса, для селекта.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508527
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Generic проверяется на этапе компиляции. В рантайме класс ведет себя как будьто работает с Object, ну или с базовым классом/интерфейсом. Короче тип не знает.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508536
Самоловских Виталий aka Kefir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНСуть дела: пишу DAO для Hibernate. Было бы круто написать одно DAO для всех классов, стандартная логика добавить/удалить/ ... функционал для пейджинга и т.п.
Почему бы не создать поле с классом и не передавать его в конструкторе. По моему - единственный верный путь. И не такой тяжелый.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508540
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНЕдинственный вариант который я пока вижу в load передавать инстанс класса, для селекта.
Это изврат. Передавай класс и не парься.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508575
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz ТимоНЕдинственный вариант который я пока вижу в load передавать инстанс класса, для селекта.
Это изврат. Передавай класс и не парься.
Почему изврат?
Код: plaintext
1.
2.
3.
  DAO<User> udao =  new  DAO<User>();
  ...
  DAO<SomeOtherObject> sodao =  new  DAO<SomeOtherObject>();

Все красиво получается, до метода load, как раз таки передавать класс в параметризованый класс это изврат. Так несчитаете?
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508586
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Самоловских Виталий aka Kefir ТимоНСуть дела: пишу DAO для Hibernate. Было бы круто написать одно DAO для всех классов, стандартная логика добавить/удалить/ ... функционал для пейджинга и т.п.
Почему бы не создать поле с классом и не передавать его в конструкторе. По моему - единственный верный путь. И не такой тяжелый. В данном случае вся прелесть джинериков теряется.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508669
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТимоНВсе красиво получается, до метода load, как раз таки передавать класс в параметризованый класс это изврат. Так несчитаете?
Так я ж про load()

load(new User()) vs load(User.class)
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508728
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz ТимоНВсе красиво получается, до метода load, как раз таки передавать класс в параметризованый класс это изврат. Так несчитаете?
Так я ж про load()

load(new User()) vs load(User.class)
А да я имел ввиду ваш вариант load(User.class). Затупил.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508773
Фотография brut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public   abstract   class  CommonEntityDaoManager<T> {
     public  T getById( Long  id) {
        T item;
         Class  genericClassType = getGenericClass();
        Session currentSession = getCurrentSesstion();
        currentSession.beginTransaction();
        item = (T) currentSession.get(genericClassType, id);
        currentSession.getTransaction().rollback();
         return  item;
    }
    
   protected   Class  getGenericClass() {
         return  ( Class ) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ];
    }    
}

...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508840
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brut
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public   abstract   class  CommonEntityDaoManager<T> {
     public  T getById( Long  id) {
        T item;
         Class  genericClassType = getGenericClass();
        Session currentSession = getCurrentSesstion();
        currentSession.beginTransaction();
        item = (T) currentSession.get(genericClassType, id);
        currentSession.getTransaction().rollback();
         return  item;
    }
    
   protected   Class  getGenericClass() {
         return  ( Class ) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[ 0 ];
    }    
}


спасибо, попробую вечером. А зачем вам currentSession.getTransaction().rollback() ?
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508859
Фотография brut
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
закрыть транзакцию. Как-то читал (не помню где) что rollback работает быстее комита, тут комыт не нужен. Если ошибся буду бгагодарен за правки
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508880
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Hibernate имеет свойство запускать некоторые апдейты при загрузке объектов.
2) А при декларативном управлении транзакциями это rollback не усрется?
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508882
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brut
Код: plaintext
1.
 public   abstract   class  CommonEntityDaoManager<T> {

Это то что я привел первым примером. Только тогда код вроде new DAO(User) идет лесом.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508891
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz brut
Код: plaintext
1.
 public   abstract   class  CommonEntityDaoManager<T> {

Это то что я привел первым примером. Только тогда код вроде new DAO(User) идет лесом.
Точно, не заметил что он абстрактный. Вопрос остается открытым.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508912
mijer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508926
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя
getTypeParameters()

Returns an array of TypeVariable objects that represent the type variables declared by the generic declaration represented by this GenericDeclaration object, in declaration order. Returns an array of length 0 if the underlying generic declaration declares no type variables.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35508937
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mijer http://www.hibernate.org/328.html
Хороший тынц.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35510429
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
нашлось ли решение? мучаюсь с тем же только на JPA
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35510500
Cyb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(: похоже придется подождать Java 7

Reified Generics

Currently, generics are implemented using erasure, which means that the generic type information is not available at runtime, which makes some kind of code hard to write. Generics were implemented this way to support backwards compatibility with older non-generic code. Reified generics would make the generic type information available at runtime, which would break legacy non-generic code. However, Neal Gafter has proposed making types reifiable only if specified, so as to not break backward compatibility.

http://tech.puredanger.com/java7#reified
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35510614
ТимоН
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cybнашлось ли решение? мучаюсь с тем же только на JPA
вон же тынц на hibernate generic DAO
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35511065
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cyb(: похоже придется подождать Java 7
Спецификации (JSR) на Java 7 нет и в скором времени не предвидится. Лично я на счет генериков сильно сомневаюсь.
...
Рейтинг: 0 / 0
Generic параметризованный класс.
    #35513879
tompson
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brutзакрыть транзакцию. Как-то читал (не помню где) что rollback работает быстее комита, тут комыт не нужен. Если ошибся буду бгагодарен за правки
Если говорить про Оракл - то вы совершенно правы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Generic параметризованный класс.
    #38273955
Фотография buldozer01
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
brut
Код: java
1.
2.
3.
        currentSession.beginTransaction();
        item = (T) currentSession.get(genericClassType, id);
        currentSession.getTransaction().rollback();



Руки бы пообрывал за такой код
...
Рейтинг: 0 / 0
25 сообщений из 28, страница 1 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Generic параметризованный класс.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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