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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача параметра типа List.class, вместе с генериками 
V
    Опции темы
v2v
Дата 10.10.2008, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



есть метод c одним параметром параметром class :
Код

somemethod(Class clzz){
}


Вызываю его например так:
Код

somemethod(String.class)
//или
somemethod(List.class)


проблема в том, что мне надо указать женерик тип для моего Списка, тоесть вызвать как то вроде:
Код

somemethod(List<Integer>.class)

что нельзя , а как можно?


--------------------
PM   Вверх
Aristotelb
Дата 10.10.2008, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Можно подробнее, что ты хочеш добиться такой конструкцией?
PM MAIL ICQ   Вверх
v2v
Дата 10.10.2008, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



передать параметр указанного типа в класс...

Добавлено через 6 минут и 7 секунд
видимо это не возможно.


--------------------
PM   Вверх
ivg
Дата 10.10.2008, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Код

    ParameterizedType t = sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl
        .make(List.class, new Class[]{Integer.class}, null);
    somemethod(t);
 ну или
Код

public class MyClass {
    static abstract class IntegerList implements List<Integer>{};

    ...
    somemethod(IntegerList.class);
    ...
}

PM MAIL   Вверх
Dims
Дата 10.10.2008, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

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



Вот такой код

Код

class Prmtized<T> {
   public T t;
}


public class Test02 {
    public static void main(String[] args) {
      
      Prmtized<String> a = new Prmtized<String>();
      Prmtized<Integer> b = new Prmtized<Integer>();
      
      
      if( a.getClass().equals( b.getClass() ) ) {
         System.out.println("Classes are equal");
      }
      else {
         System.out.println("Classes are unequal");
      }
      
      
   }
}


Выводит
Classes are equal, то есть, классы, параметризованные разными параметрами -- это одно и то же.
PM MAIL   Вверх
v2v
Дата 10.10.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

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



Dims, да , спасибо.
оказалось что существует ещё один somemethod , вторым параметром в который как раз и передаётся класс-параметризатор.


--------------------
PM   Вверх
SaSho
Дата 13.10.2008, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 10.6.2007
Где: Днепропетровск

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



Цитата(Dims @  10.10.2008,  20:00 Найти цитируемый пост)

Выводит
Classes are equal, то есть, классы, параметризованные разными параметрами -- это одно и то же. 


Логично, ведь дженерики в Java реализованы не в рантайме, а на этапе компиляции. При компиляции просходит т.наз."стирание".
Поэтому версия загружаемого classloader'ом класса лишь одна.
PM MAIL ICQ Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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