如何使用java中的反射查找类中使用其他接口扩展其他类的所有接口

时间:2015-01-20 16:21:45

标签: java class reflection interface find

例如我有:

interface IA;
interface IB;

public class B implements IB;
public class A extends B implements IA;

如何在A.class中找到扩展B.class中所有已实现的接口?,方法Class<?> getInterfaces()仅返回A类中不在扩展类中的接口。

3 个答案:

答案 0 :(得分:1)

获取superclass及其接口

Class<?> clazz = A.class;
Class<?>[] interfaces = clazz.getSuperclass().getInterfaces();
// add interfaces to some larger list

递归执行此操作,直到超类为Objectnull

  

如果这个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)

番石榴溶液:

Proxies.java

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界面上。