我有一堆代理对象,我需要确定哪些类和接口这些对象除了代理的实例。 换句话说,我实际上并不是在寻找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. 如何获取所有模型实例中的所有has_many对象?
- 4. 实现接口的类和genric对象
- 5. 如何在ActionScript 3中从类的实例获取类对象?
- 6. 如何获取对象的所有私有字段中的实例?
- 7. 是否有可能获得实现接口的所有类?
- 8. 当它是一个子类的实例时如何获取对象的类名?
- 9. 获取泛型接口类对象
- 10. 从Java接口获取类对象
- 11. 如何获得Guice的所有实现者/接口的子类?
- 12. 如何从动态创建的类获取对象的实例
- 13. 如何在.net核心1.0中获取接口的所有实例
- 14. 获取所有实例化的javascript对象并更新值
- 15. 获取CoffeeScript对象的所有实例方法
- 16. 如何从不完整的类名获取实例化对象?
- 17. Api控制器获取实现接口的所有类型
- 18. 获取通用接口的所有实现类型
- 19. 如何获得类对象没有实例或类名称
- 20. 调试:获取对象的所有实例变量(未知类型)的列表
- 21. 实例化接口对象时的ClassCastException
- 22. 如何获取或杀死某些类的所有实例?
- 23. 如何获取页面上对象的所有实例的列表
- 24. 获取实现接口的每个类的实例
- 25. 获取在应用程序中实现接口的所有对象
- 26. 如何获取没有引用对象的实例的collection_name?
- 27. 如何获取Go中实现接口的包中定义的所有类型?
- 28. 获取对象的实例,它是否属于类?
- 29. PHP - 获取具有类数组的实例化对象数组
- 30. 类对象和类的实例
你可以分享你研究这个严重文件功能?这样我们就知道你已经掌握了哪些知识。 – 2015-02-10 17:26:50