Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java反射库:非递归地在包中查找子类_Java_Reflection_Reflections - Fatal编程技术网

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())的类是错误的。更新答案,我会接受。我最终按照这些思路做了一些事情,因为似乎是这样。我尝试了一些使用过滤器的组合,但我认为我发现阻止这些组合是有用的。