[英]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
遞歸執行此操作,直到超類為Object
或null
為止。
如果該
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();
}
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.