3

给定以下代码段:

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

该库递归搜索MyClass在给定包和子包中扩展的所有类。我只需要在给定的包中执行此操作,即不需要在子包中执行此操作。有没有办法这样做?

4

2 回答 2

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...
于 2014-05-15T10:00:16.747 回答
1

这是蛮力,但是:

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

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

于 2014-05-01T20:59:17.103 回答