Re: Listing loaded classes implementing a given interface
Julien Lafaye <sensei+usenet@pinglou.net> writes:
My question: is there a way to list all the class in the
classpath of the running application ?
Then why is the subject ?Listing loaded classes?? Either you
want to list loaded classes or classes from the classpath.
A similar operation exists in the library ?ram.jar?.
This operation is based on Code by Ralf Ullrich.
One can find all classes of a jar that have any chosen
property, as long as this property can be obtained from the
class reference.
For example, to find all classes implementing ?java.util.Map?,
one sets a filter accepting only classes which
?java.util.Map? is assignable from:
public boolean accepts( final java.lang.Class class_ )
{ return java.util.Map.class.isAssignableFrom( class_ ); }
One also needs to provide a starting class to find the jar, which
is done as follows.
public java.lang.String entryPath(){ return "java.lang.Object"; }
The jar containing this type will be chosen for exploration.
However, the client does not need to specify this ?entryPath?,
as "java.lang.Object" is the default obtained by extending
?de.dclj.ram.java.lang.reflect.Finder.DefaultSpecification?.
The example client is:
public class Main
{ /* based on an idea and on code by Ralf Ullrich from 2006 */
public static void main( final java.lang.String[] args )
{ new de.dclj.ram.java.lang.reflect.Finder
( new de.dclj.ram.java.lang.reflect.Finder.DefaultSpecification()
{
public boolean isClassFinder(){ return true; }
public boolean accepts( final java.lang.Class class_ )
{ return java.util.Map.class.isAssignableFrom( class_ ); }
}).inspectJar(); }}
class java.lang.ProcessEnvironment
class java.rmi.server.RemoteObjectInvocationHandler$MethodToHash_Maps$1
class java.security.AuthProvider
(...)
class java.util.Properties
class java.util.Hashtable
interface java.util.Map
The library ?ram.jar? is an early publication in alpha state,
it is experimental, changing, and mostly undocumented. See:
http://www.purl.org/stefan_ram/pub/ram-jar