Java Reflections库:非递归地查找包中的子类

时间:2014-05-01 20:49:17

标签: java reflection google-reflections

给出以下代码段:

Set<Class<? extends MyClass>> allClasses = 
  new Reflections("mypackage").getSubTypesOf(MyClass.class);

库以递归方式搜索给定包和子包中扩展MyClass的所有类。我只需要在给定的包中执行此操作,即不在子包中。有办法吗?

2 个答案:

答案 0 :(得分:3)

您可以使用输入过滤器(谓词),以便子包中的类型不会被扫描:

new Reflections(new ConfigurationBuilder().
    addUrls(ClasspathHelper.forPackage("my.pack")).
    filterInputsBy(new FilterBuilder().
        include("my\\.pack\\..*\\.class").
        exclude("my\\.pack\\..*\\..*\\.class")));

当然,您可以随时(发布)过滤结果,例如:

import static org.reflections.ReflectionUtils.*;

getAll(reflections.getSubTypesOf(A.class), 
    withPattern(".*my\\.pack\\.(?!.*\\..*).*")); //ouch...

答案 1 :(得分:1)

这是蛮力,但是:

1)获取MyClass的子类。放入一套。

2)迭代集合中的类;删除属于其他包的类(即_someClass.getPackage()。equals(MyClass.class.getPackage())为false的那些类)