簡體   English   中英

如何使用Java中的反射查找在類中使用其他接口擴展其他類的所有接口

[英]How to find all interfaces in class that extends other classes with other interfaces using reflection in java

例如我有:

interface IA;
interface IB;

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

如何可以在找到A.class在擴展所有實現的接口B.class太?,方法Class<?> getInterfaces()中僅返回接口A類不在擴展的類。

獲取超類及其接口

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

遞歸執行此操作,直到超類為Objectnull為止。

如果該Class表示Object類,接口,原始類型或void ,則返回null

您必須循環,在A上調用getInterfaces ,然后使用getSuperclass獲取其超類,然后再次執行此操作, 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();
}

番石榴解決方案:

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();

我使用它從DyanmicProxy實例中提取Annotations ,在DyanmicProxy實例中, Annotations位於專用的SubType接口上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM