У меня есть следующий класс
public class MyClass<T> {
public Class<T> getDomainClass() {
GET THE CLASS OF T
}
}
Я погуглил эту проблему и все ответы, которые я мог найти, сказал мне использовать getGenericSuperClass (), но проблема этого метода состоит в том, что у меня должен быть второй класс, который расширяет MyClass, и я не хочу делать это. То, в чем я нуждаюсь, должно получить параметрический тип реального класса?
Вы не можете. Нужная информация (т.е. значение T) недоступна во время выполнения из-за стирания типа.
Единственный способ, о котором я знаю:
public class MyClass<T> {
private Class<T> clazz;
public MyClass(Class<T> clazz) {
this.clazz = clazz;
}
public Class<T> getDomainClass() {
return clazz;
}
}
Таким образом, вы в основном предоставляете среде выполнения информацию, которой она не получает от компилятора.
Если вам нужно знать тип, вам, вероятно, не следует использовать дженерики.
Из-за стирания типа единственный способ получить его - это передать его как явный параметр - либо в методе, либо в конструкторе.
public class MyClass<T> {
public Class<T> getDomainClass(Class<T> theClass) {
// use theClass
}
}