例如我有:
interface IA;
interface IB;
public class B implements IB;
public class A extends B implements IA;
如何在A.class
中找到扩展B.class
中所有已实现的接口?,方法Class<?> getInterfaces()
仅返回A
类中不在扩展类中的接口。
答案 0 :(得分:1)
获取superclass及其接口
Class<?> clazz = A.class;
Class<?>[] interfaces = clazz.getSuperclass().getInterfaces();
// add interfaces to some larger list
递归执行此操作,直到超类为Object
或null
。
如果这个
Class
代表Object
类,一个接口,一个 原始类型或void
,然后返回null
。
答案 1 :(得分:0)
你必须循环,在getInterfaces
上调用A
,然后使用getSuperclass
获取其超类,然后再次执行,等等,直到getSuperclass
返回null
。
List<Class<?>> list = new LinkedList<Class<?>>();
Class<?> cls = A.class;
while (cls != null) {
// Call cls.getInterfaces, add result to list
// ...
// Go to its parent
cls = cls.getSuperclass();
}
答案 2 :(得分:0)
public static TypeToken.TypeSet getTypes(@Nonnull final Class cls)
{
return TypeToken.of(cls).getTypes();
}
public static TypeToken subClassesOf(@Nonnull final Class superClass, @Nonnull final Set<TypeToken> typeTokens)
{
for (final TypeToken tt : typeTokens)
{
if (tt.getRawType().getSuperclass() == null)
{
return tt;
}
{
return subClassesOf(superClass, tt.getTypes().interfaces());
}
}
return null;
}
以下是您的称呼方式:
final Class superClass = // super class you want the subclass Interface of
final TypeToken tt = TypeToken.of(superClass.getClass());
final TypeToken tti = Proxies.subClassesOf(superClass.getClass(),tt.getTypes().interfaces());
final Class subTypeInterface = tti.getRawType();
我使用此功能从Annotations
实例中提取DyanmicProxy
,其中Annotations
位于专用SubType
界面上。