我有以下代码:
Reflections reflections = new Reflections(packageName, new SubTypesScanner(false));
Set<Class<? extends Action>> allClasses = reflections.getSubTypesOf(Action.class);
for (Class<?> subTypeOfActionInPackageNameClass : allClasses) {
System.out.println(subTypeOfActionInPackageNameClass.getName());
}
Run Code Online (Sandbox Code Playgroud)
我希望这会打印扩展 Action 的类的所有类名,以及扩展这些类的所有类,因为它们也间接扩展了 Action。例如 C 扩展 B 扩展 A。如果我做反射.getSubTypesOf(A.class); 它只返回 B 类,但我希望它也返回 C 类。
我怀疑这与 SubTypesScanner 有关系,但调查后我没有发现任何东西可以让它返回 C 类。
现在的问题是:
a) 它应该表现得那样吗?
b) 如果 a 的答案是肯定的,有没有办法返回所有直接和间接扩展类 A 的类?
提前致谢!
小智 5
a) 是的,如果您的类位于不同的包中,它应该表现得如此。如 Reflections文档中所述:
确保扫描所有可传递相关的包。例如,假设您的类 C 扩展了 B 扩展了 A,并且 B 和 A 都位于 C 之外的另一个包中,当仅扫描 C 的包时 - 然后查询 A 的子类型不返回任何内容(可传递),但查询B 的子类型返回 C(直接)。在这种情况下,请确保先验扫描所有相关的包。
b) 有多种解决方法可以解决您的问题:
Set<Class<? extends Action>> allClasses = new Reflections("my.package").getSubTypesOf(A.class);将返回 B 和 C。Set<Class<? extends Action>> allClasses = new Reflections("my.package.b", "my.package.c").getSubTypesOf(A.class);将同时返回 B 和 C。| 归档时间: |
|
| 查看次数: |
1481 次 |
| 最近记录: |