如果我有
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发布于 2016-02-23 21:22:58
这实际上是记录在案的行为,尽管它可以说不是特别清楚或直观:
请注意,当使用构造函数
new Reflections("my.package")时,将只扫描前缀为“my.package”的urls,其他urls中的任何传递类都不会被扫描(例如,如果my.package.SomeClass扩展了other.package.OtherClass,而后者则不会被扫描)。在这种情况下,使用其他构造函数并指定相关的包/urls。
编辑:该文档的后期修订说:
确保扫描所有与过渡相关的包。例如,如果您的类C扩展了B扩展A,并且B和A都位于C以外的另一个包中,当只扫描C的包时--然后查询A的子类型不返回任何(传递的),但是查询B的子类型会返回C(直接)。在这种情况下,一定要事先扫描所有相关的包。
在本例中,java.lang.Enum是一个传递类(如other.package.OtherClass),因此不包括在扫描中,这意味着Enum的子类不包括在内。
类似地,如果我们在问题的示例中将Reflections扩展到目标包之外,例如。
public class Reflector extends Exception {然后在扫描中就找不到该类了。
Objects: []
Enums: [class cupawntae.MyEnum]
Enum's superclass: class java.lang.Objecthttps://stackoverflow.com/questions/35584995
复制相似问题