Следующий код получает первый класс параметров типа, объявленный в общем виде в интерфейсе SomeGenericInterface
, который конкретно реализуется в классе SomeClass
.
Этот код действительно работает.
Вопросis: Работает ли оно в любом случае, то есть следующие два метода класса:
getInterfaces()
getGenericInterfaces()
гарантированно всегдаимеют одинаковое количество элементов с одинаковым соответствующим порядком интерфейсов, возвращаемых этими методами?
Или есть какой-то более безопасный способ сделать это?
<!-- language: lang-java -->
Class clazz = SomeClass.class;
Class classes[] = clazz.getInterfaces();
Type types[] = clazz.getGenericInterfaces();
ParameterizedType found = null;
for (int i=0; i<classes.length; i++) {
if ( classes[i] == SomeGenericInterface.class) {
found = (ParameterizedType) types[i];
break;
}
}
if (found == null) {
return null;
}
Class firstType = (Class) found.getActualTypeArguments()[0];