Posted at

Guava 特定パッケージ内のクラス一覧を取得する

More than 1 year has passed since last update.

com.google.common.reflect.ClassPathを使用して、特定パッケージ配下のクラスを取得してみる。

pom.xml

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->

<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>23.0</version>
</dependency>

getTopLevelClassesRecursiveメソッドで指定パッケージより下のパッケージから再帰的にクラスを取得してくれます。ただ単に、指定パッケージ内のクラス一覧を取得したい場合はgetTopLevelClassesメソッドを使用します。

ClassLoader loader = Thread.currentThread().getContextClassLoader();

try {
Set<Class<?>> classes = ClassPath.from(loader)
.getTopLevelClassesRecursive(getClass().getPackage().getName()).stream()
.map(info -> info.load())
.collect(Collectors.toSet());

classes.forEach(System.out::println);
} catch (IOException e) {
// TODO
}

※インナークラスについては取得できません。

※TopLevelであれば、enum, interface, abstract classも取得できます。