I have been trying to do this for quite some time now and can't seem to get the desired output.
What I want to do is have a class name say java.util.Vector
get the:
- the directly implemented interfaces if
java.util.Vector
. - the interfaces directly implemented by the superclasses.
- and, transitively, all superinterfaces of these interfaces.
Any help would be appreciated.
If you are open to use another library : use apache-commons-lang
You could do a BFS using the reflection for it.
Start with a
Set<Class<?>>
that contains onlyVector
, and iteratively increase the set with new elements usingClass.getInterfaces()
andClass.getSuperclass()
Add the just added elements to the
Queue
[which is needed for the BFS run]. Terminate when the queue is empty.Post processing: iterate the
Set
- and take only objects that are interfaces usingClass.isInterface()
Should look something like that:
Although java.util.Vector is not an interface, and thus you cannot extend it with an interface, what you can do is use a library like Reflections to accommodate these sorts of features. Reflections allows you to scan the classpath and query for a set of conditions like what implements or extends the given class/interface. Ive used it successfully on a couple projects where I needed to scan for interface implementations and annotated classes.
Here's the explicit link: http://code.google.com/p/reflections/
Additionally, if you are looking to just find out what class/interface a class extends/implements you can just use the class reflection api via the class attribute.
Here's some examples: