以下代码获取在接口SomeGenericInterface
中一般声明的第一个类型参数类,该类在类SomeClass
中具体实现。
此代码确实有效。
问题是:它是否在任何情况下都有效,即以下两种类方法:
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];
答案 0 :(得分:2)
两种方法的javadoc都说明了:
如果此对象表示类,则返回值为数组 包含表示由实现的所有接口的对象 类。数组中接口对象的顺序对应于 。的implements子句中接口名称的顺序 该对象所代表的类的声明。
因此,您的问题的答案是肯定的,相同数量的元素和相同的顺序。
答案 1 :(得分:0)
无论如何都适用
不,但不是因为你怀疑的原因。它只有在类直接实现接口时才会起作用(而不是从超类中继承接口),并为type参数指定具体类型(而不是使用类型参数,如下例所示)。 / p>
class CounterExample<T> implements Interface<T> {}