特定のクラスを継承したクラス一覧を出力する方法
掲題の通り、EclipseとかNetBeansの力を借りずにコードを書いてリストを出してみました。
guavaのClassPath使えばこんな感じで簡単に出せるようです。
package tester; import com.google.common.reflect.ClassPath; import java.io.IOException; import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; import java.util.stream.Collectors; import org.apache.struts.action.Action; /** * * @author yushi.koga */ public class Main { public static void main(String... args) { try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); Set<Class<?>> allClasses = ClassPath.from(loader) .getTopLevelClassesRecursive("my.package").stream() .map(info -> info.load()) .collect(Collectors.toSet()); allClasses.stream().filter((actionClass) -> (Action.class.isAssignableFrom(actionClass))).forEach((actionClass) -> { System.out.println(actionClass.toString()); }); } catch (IOException ex) { Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex); } } }