Java反射库:以非递归方式查找包中的子类



给定以下片段:

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

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

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

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( 获取MyClass的子类。放入一套。

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

相关内容

  • 没有找到相关文章

最新更新