Объект класса Java от переменной типа

Существует ли способ получить Объект класса от переменной типа в Java универсальный класс? Что-то как этот:

public class Bar extends Foo<T> {
    public Class getParameterClass() {
        return T.class; // doesn't compile
    }
}

Эта информация о типе доступна во время компиляции и поэтому не должна быть затронута стиранием типа, таким образом, теоретически, должен быть способ выполнить это. Это существует?

21
задан Alexander Temerev 10 May 2010 в 08:24
поделиться

2 ответа

Это работает:

public static class Bar extends Foo<String> {
  public Class<?> getParameterClass() {
    return (Class<?>) (((ParameterizedType)Bar.class.getGenericSuperclass()).getActualTypeArguments()[0]);
  }
}
25
ответ дан 29 November 2019 в 21:05
поделиться

Фрагмент кода немного сбивает с толку. Является ли T параметром типа или классом?

public static class Bar extends Foo<String> {
    public Class<?> getParameterClass() {
        return (Class<?>) (((ParameterizedType)Bar.class.getGenericSuperclass()).getActualTypeArguments()[0]);
    }
}

public static class Bar2<T> extends Foo<T> {
    public Class<?> getParameterClass() {
        return (Class<?>) (((ParameterizedType)Bar2.class.getGenericSuperclass()).getActualTypeArguments()[0]);
    }
}


public static void main(String[] args) {
    System.out.println(new Bar().getParameterClass());
    System.out.println(new Bar2<Object>().getParameterClass());
}

На самом деле второй println вызовет исключение.

6
ответ дан 29 November 2019 в 21:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: