Получение типа параметрического параметра класса?

У меня есть следующий класс

public class MyClass<T> {
    public Class<T> getDomainClass() {
          GET THE CLASS OF T
    }
}

Я погуглил эту проблему и все ответы, которые я мог найти, сказал мне использовать getGenericSuperClass (), но проблема этого метода состоит в том, что у меня должен быть второй класс, который расширяет MyClass, и я не хочу делать это. То, в чем я нуждаюсь, должно получить параметрический тип реального класса?

7
задан IAdapter 13 June 2010 в 20:27
поделиться

4 ответа

Вы не можете. Нужная информация (т.е. значение T) недоступна во время выполнения из-за стирания типа.

5
ответ дан 6 December 2019 в 21:10
поделиться

Единственный способ, о котором я знаю:

public class MyClass<T> {

    private Class<T> clazz;

    public MyClass(Class<T> clazz) {
       this.clazz = clazz;
    }

    public Class<T> getDomainClass() {
      return clazz;
    }
}

Таким образом, вы в основном предоставляете среде выполнения информацию, которой она не получает от компилятора.

3
ответ дан 6 December 2019 в 21:10
поделиться

Если вам нужно знать тип, вам, вероятно, не следует использовать дженерики.

0
ответ дан 6 December 2019 в 21:10
поделиться

Из-за стирания типа единственный способ получить его - это передать его как явный параметр - либо в методе, либо в конструкторе.

public class MyClass<T> {
    public Class<T> getDomainClass(Class<T> theClass) {
          // use theClass
    }
}
3
ответ дан 6 December 2019 в 21:10
поделиться
Другие вопросы по тегам:

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