【发布时间】:2016-02-23 18:07:15
【问题描述】:
如果我有
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());
}
}
枚举类:
package cupawntae;
public enum MyEnum {
}
输出:
Objects: [class cupawntae.Reflector]
Enums: [class cupawntae.MyEnum]
Enum's superclass: class java.lang.Object
【问题讨论】:
-
看起来像一个错误。请注意,如果枚举实现了任何接口,它会突然被发现。在错误得到修复之前,您可以使用例如
ClassPath.from(ClassLoader.getSystemClassLoader()).getTopLevelClasses("cupawntae")Google Guava。不是那么光滑,但可以完成工作。 -
谢谢,但看起来它已记录在案 - 尽管界面的东西很奇怪。你是怎么发现的?您是否有机会在目标包中实现接口?
标签: java reflection enums reflections