Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Передача параметра типа List.class


Автор: v2v 10.10.2008, 14:26
есть метод c одним параметром параметром class :
Код

somemethod(Class clzz){
}


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

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


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

somemethod(List<Integer>.class)

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

Автор: Aristotelb 10.10.2008, 14:45
Можно подробнее, что ты хочеш добиться такой конструкцией?

Автор: v2v 10.10.2008, 15:20
передать параметр указанного типа в класс...

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

Автор: ivg 10.10.2008, 16:09
Код

    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);
    ...
}

Автор: Dims 10.10.2008, 20:00
Вот такой код

Код

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, то есть, классы, параметризованные разными параметрами -- это одно и то же.

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

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

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


Логично, ведь дженерики в Java реализованы не в рантайме, а на этапе компиляции. При компиляции просходит т.наз."стирание".
Поэтому версия загружаемого classloader'ом класса лишь одна.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)