Если у меня естьПочему reflections.getSubTypesOf (Object.class) не находит перечисления?
Reflections reflections = new Reflections("my.package", classLoader, new SubTypesScanner(false));
, то это находит мои перечисления классов
Set<Class<? extends Enum>> enums = reflections.getSubTypesOf(Enum.class);
но это не
Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
Есть ли причина для этого?
Возпроизводимо пример:
package cupawntae;
import org.reflections.Reflections;
import org.reflections.scanners.SubTypesScanner;
public class Reflector {
public static void main(String[] args) {
Reflections reflections = new Reflections("cupawntae", Reflector.class.getClassLoader(), new SubTypesScanner(false));
System.out.println("Objects: " + reflections.getSubTypesOf(Object.class));
System.out.println("Enums: " + reflections.getSubTypesOf(Enum.class));
System.out.println("Enum's superclass: " + Enum.class.getSuperclass());
}
}
Enum Класс:
package cupawntae;
public enum MyEnum {
}
Выход:
Objects: [class cupawntae.Reflector]
Enums: [class cupawntae.MyEnum]
Enum's superclass: class java.lang.Object
выглядит как ошибка. Обратите внимание, что если enum реализует какой-либо интерфейс, он неожиданно обнаруживается. Пока ошибка не будет исправлена, вы можете использовать, например, 'ClassPath.from (ClassLoader.getSystemClassLoader()). GetTopLevelClasses (" cupawntae ")' Google Guava. Не так гладко, но выполняет свою работу. –
Спасибо, но похоже, что это задокументировано - хотя это странно в отношении интерфейса. Как вы это узнали? Вы случайно реализовали интерфейс внутри своего целевого пакета? – CupawnTae