[英]How to get all the interfaces and classes that an object is an instance of?
我有一堆代理對象,除了代理之外,我還需要確定這些對象是哪些類和接口。 換句話說,我實際上不是在尋找instanceof運算符,而是在尋找所有instanceof對於特定對象返回true的類和接口。
您可以使用反射來確定這一點。 從根本上講,Java Class
類包含列出接口和超類的訪問器。
Class clazz = someObject.getClass();
clazz.getInterfaces();
clazz.getSuperclass();
您應該進一步了解Java Reflection API。 一個好的地方可能是從Class文檔開始。
您應該使用Class.getInterfaces()
和Class.getSuperclass()
方法。 我相信這些將需要遞歸; 一個例子是:
<T> Set<Class<? super T>> getSuperclasses(Class<? super T> clazz) {
Set<Class<? super T>> superclasses = new HashSet<>();
if (clazz.getSuperclass() != null) {
superclasses.addAll(getSuperclasses(clazz.getSuperclass()));
}
return superclasses;
}
和接口:
<T> Set<Class<? super T>> getSuperInterfaces(Class<T> clazz) {
Set<Class<? super T>> superInterfaces = new HashSet<>();
if (clazz.getInterfaces().length != 0) {
// Only keep the one you use
// Java 7:
for (Class<?> superInterface : clazz.getInterfaces()) {
// noinspection unchecked
superInterfaces.add((Class<? super T>) superInterface);
}
// Java 8:
// noinspection unchecked
Arrays.stream(clazz.getInterfaces()).map(c -> (Class<? super T>) c).forEach(superInterfaces::add);
}
return superInterfaces;
}
使用Reflection API,您可以實現所需的功能。 您將必須掃描要搜索實現的類的包或擴展特定的接口/類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.