Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting the names of all Java classes declared in a package

I'm writing a functionality where it would be helpful to get the classes inside a certain package of my program. Also, I only want the classes that subclass a certain class.

I need the classes in order to call static methods on them.

Is there an automatic way to do this? If so, is it slow?

In case I was not clear, what I want is something like this:

ArrayList<Class<? extends MySuperClass>> classes = ;

classes.add(MyClass.class); 
classes.add(MyClass2.class); 

Instead of having to call add for each class, I would like to automatically get that class list.

The number of classes is small, so I would not mind declaring them manually if the automatic trick would be slow - this app is for a mobile platform.

In either way, I would also like to know how to call the static method for each method in the ArrayList:

  // error The method nameOfStaticMethod is undefined for the type Class<capture#2-of ? extends MySuperClass>
  classes.get(0).nameOfStaticMethod (); 

Thanks for your comments.

like image 597
MyName Avatar asked Nov 13 '10 14:11

MyName


1 Answers

Java doesn't provide this ability. There is no introspection at the package level. The classes could be records in a database, or on the other side of a network connection. There's no requirement for them to be stored and organized so as to facilitate enumerating them by package.

You could make a custom class loader and API to provide a method of listing the class names.

like image 117
bmargulies Avatar answered Oct 20 '22 12:10

bmargulies