Java反射库:非递归地在包中查找子类
给出以下代码段:Java反射库:非递归地在包中查找子类,java,reflection,reflections,Java,Reflection,Reflections,给出以下代码段: Set<Class<? extends MyClass>> allClasses = new Reflections("mypackage").getSubTypesOf(MyClass.class); Set这是蛮力,但: 1) 获取MyClass的子类。放进一套 2) 迭代集合中的类;删除属于其他包的类(即_someClass.getPackage().equals(MyClass.class.getPackage())为false的类)您可
Set<Class<? extends MyClass>> allClasses =
new Reflections("mypackage").getSubTypesOf(MyClass.class);
Set这是蛮力,但:
1) 获取MyClass的子类。放进一套
2) 迭代集合中的类;删除属于其他包的类(即_someClass.getPackage().equals(MyClass.class.getPackage())为false的类)您可以使用输入筛选器(谓词),这样子包中的类型就不会被扫描:
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...
我认为你不理解这个问题。这与子类无关,但与子包有关。哦,对不起,读错了。但是,您仍然可以使用蛮力方法:迭代GetSubsubsof返回的所有类,并删除那些(_someClass.getPackage().equals(MyClass.class.getPackage())的类是错误的。更新答案,我会接受。我最终按照这些思路做了一些事情,因为似乎是这样。我尝试了一些使用过滤器的组合,但我认为我发现阻止这些组合是有用的。