Java Guavaライブラリが提供するClassPathで全クラスを探す
ここでは、GuavaライブラリのClassPathを使って、パッケージに含まれるクラスを探す方法を見ていく。
ロード可能なすべてのクラスを探す
ここでは、Google Guavaライブラリを使用してクラスを探す方法を見ていく。
Google Guavaは、クラスローダーのソースを検索し、ロード可能なすべてのクラスを見つけるClassPathユーティリティクラスを提供している。
次の例は、入力されたパッケージ以下に存在するすべてのクラスを探して表示する。
package com.devkuma.guava.classloader;
import java.io.IOException;
import java.util.Set;
import java.util.stream.Collectors;
import com.google.common.reflect.ClassPath;
public class FindAllClasses {
public Set<Class> findAllClasses(String packageName) throws IOException {
return ClassPath.from(ClassLoader.getSystemClassLoader())
.getAllClasses()
.stream()
.filter(clazz -> clazz.getPackageName()
.startsWith(packageName))
.map(clazz -> clazz.load())
.collect(Collectors.toSet());
}
public static void main(String[] args) throws IOException {
FindAllClasses instance = new FindAllClasses();
Set<Class> classes = instance.findAllClasses("com.devkuma.guava");
for (Class clazz : classes) {
System.out.println(clazz.getCanonicalName());
}
}
}
実行結果:
com.devkuma.guava.joiner.JoinerWithKeyValueSeparator
com.devkuma.guava.joiner.JoinerArrayJoin
com.devkuma.guava.strings.StringCommonPrefixCommonSuffix
com.devkuma.guava.joiner.JoinerListJoin
... 以下省略 ...
入力されたパッケージ名にはcom.devkuma.guavaを指定した。