Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
abstract class Base<X>{
public abstract Class<X> getXType();
}
class MyClass extends Base<String>{
public Class<String> getXType(){
return String.class;
}
}
public class Test
{
private class A<T> {}
private class B extends A<String> {}
private class C<T> extends B {}
private class D extends C<Object> {}
public static void main(String[] args) throws Exception
{
Class<?> clazz = C.class;
System.out.println(clazz.getGenericSuperclass() instanceof ParameterizedType);
ReflectionUtils.getGenericParameterClass(D.class, A.class, 0); // ClassCastException, а должно было вернуть String.class
}
}
if (!(result instanceof Class)) {
// Похоже, что параметр - массив, примитивный типи, интерфейс или еще-что-то, что не является классом.
throw new IllegalStateException("Actual parameter type for " + actualClass.getName() + " is not a Class.");
}
int[]) — можно.type.getActualTypeArguments()[0]
type.getActualTypeArguments()[0]используемое в приведенном коде от гугла 1 в 1 присутствует в статье. И не решает основную задачу в полном объеме. А этот тривиальный случай с одним параметром находится поиском того же Гугла на сотне сайтов.
Узнаем параметр Generic-класса в Java