我有一堆代理對象,我需要確定哪些類和接口這些對象除了代理的實例。 換句話說,我實際上並不是在尋找instanceof運算符,而是希望獲得所有的類和接口,以便instanceof將爲特定對象返回true。如何獲取對象是實例的所有接口和類?
-1
A
回答
5
您可以使用反射來確定這一點。基本上,Java Class
類包含列出接口和超類的訪問器。
Class clazz = someObject.getClass();
clazz.getInterfaces();
clazz.getSuperclass();
您應該進一步閱讀Java Reflection API。一個好地方可能是從the Class documentation開始。
0
有了Reflection API,你可以實現你想要的。你將不得不掃描你想要搜索的包,或者擴展一個特定的接口/類。
2
您應該使用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;
}
+0
'getSuperclasses'不處理基本情況,'getSuperInterfaces'不處理。 – 2016-08-10 22:33:43
相關問題
- 1. 如何獲取類實現的所有接口?
- 2. 實例化實現通用接口實例的所有類
- 3. 如何通過多態類型獲取對象的所有實例?
- 4. 如何獲取所有模型實例中的所有has_many對象?
- 5. 如何在對象實例化C#時獲取對象類型。
- 6. 實現接口的類和genric對象
- 7. 如何在ActionScript 3中從類的實例獲取類對象?
- 8. 獲取對象的實例?
- 9. 如何獲取對象的所有私有字段中的實例?
- 10. 是否有可能獲得實現接口的所有類?
- 11. 當它是一個子類的實例時如何獲取對象的類名?
- 12. 如何檢測COM對象實現的所有接口?
- 13. 如何獲得Guice的所有實現者/接口的子類?
- 14. 獲取泛型接口類對象
- 15. 從Java接口獲取類對象
- 16. 如何獲取實例的對象引用的類型?
- 17. 如何從動態創建的類獲取對象的實例
- 18. 如何在.net核心1.0中獲取接口的所有實例
- 19. 如何獲取帶有TypeScript字段的函數接口實例?
- 20. 獲取CoffeeScript對象的所有實例方法
- 21. 獲取所有實例化的javascript對象並更新值
- 22. 如何獲得實現指定接口的所有類
- 23. 如何從不完整的類名獲取實例化對象?
- 24. Api控制器獲取實現接口的所有類型
- 25. 獲取在WinRT中實現給定接口的所有類
- 26. 獲取通用接口的所有實現類型
- 27. 如何使用反射來獲取接口的所有實現?
- 28. 如何獲得類對象沒有實例或類名稱
- 29. 如何爲對象的所有實例調用對象函數
- 30. 實例化接口對象時的ClassCastException
你可以分享你研究這個嚴重文件功能?這樣我們就知道你已經掌握了哪些知識。 – 2015-02-10 17:26:50