Johannes Link's ClasspathSuite Verwendung, konnte ich es, wie dies tun:
import org.junit.extensions.cpsuite.ClassTester;
import org.junit.extensions.cpsuite.ClasspathClassesFinder;
public static List<Class<?>> getClasses(final Package pkg, final boolean includeChildPackages) {
return new ClasspathClassesFinder(new ClassTester() {
@Override public boolean searchInJars() { return true; }
@Override public boolean acceptInnerClass() { return false; }
@Override public boolean acceptClassName(String name) {
return name.startsWith(pkg.getName()) && (includeChildPackages || name.indexOf(".", pkg.getName().length()) != -1);
}
@Override public boolean acceptClass(Class<?> c) { return true; }
}, System.getProperty("java.class.path")).find();
}
Die ClasspathClassesFinder für Klasse sieht Dateien und Gläser im Systemklassenpfad.
In Ihrem speziellen Fall könnten Sie acceptClass wie folgt ändern:
@Override public boolean acceptClass(Class<?> c) {
return ICommand.class.isAssignableFrom(c);
}
Eine Sache zu beachten: Seien Sie vorsichtig, was Sie in acceptClassName zurückkehren, wie das nächste, was ClasspathClassesFinder tut, ist die Klasse zu laden und rufen acceptClass . Wenn acceptClassName immer true zurückgibt, wird am Ende jede Klasse im Klassenpfad geladen, was zu einem OutOfMemoryError führen kann.
Bitte bearbeiten Sie dies, um lesbar zu sein. Was ist ein "Java-Paket"?Was ist ein "Befehlswunsch"? – bmargulies
Das Thema ist perfekt: http://google.com/search?q=Alle+Klassen+aus+einem+Paket =) – BalusC
@balusc, aber die/correct/-Antwort ist schwer. –