java - 无法使用反射获取包的类
问题描述
从上图中,当我尝试获取“测试”下的所有类时,我得到的是空数组。
Reflections reflections = new Reflections("tests");
//Reflections reflections = new Reflections("src.test.java.tests"); Tried but still empty array
Set<Class<? extends Object>> allClasses = reflections.getSubTypesOf(Object.class); //Getting empty array here
Class[] arrayCls=new Class[allClasses.size()];
allClasses.toArray(arrayCls);
有人可以帮我如何获得一系列课程吗?
解决方案
这个解决方案对我有用,我在 src 文件下有一个打包的命名测试,它直接包含类和带有类的子包,它返回到包含相应类的正确集合。Reflections 构造函数的第一个参数必须是您的 packageName 附加一个“。” 到底 :
Reflections reflections = new Reflections("testing.", new SubTypesScanner(false));
Set<Class<?>> classes = reflections.getSubTypesOf(Object.class);
不要忘记将相应的 jars 添加到您的项目中:annotations-2.0.1.jar,guava-15.0,javassist-3.19.0-GA,reflections-0.9.10 您可以从这里下载它们https://jar -download.com/artifacts/org.reflections/reflections/0.9.10/source-code。
更新:这将在测试包下工作。它基于 Guava 14 中的 ClassPath 类。这里使用 TestNGRunner 类加载器来获取放置在 TestNGRunner 的同一 src 包下的类,即 src/test/java。检查完成了类的全名 (packageName+.+className) 这就是我使用startsWith("tests.") 的原因:
final ClassLoader loader = TestNGRunner.class.getClassLoader();
Set<Class<? extends Object>> allClasses = new HashSet<Class<? extends Object>>();
for (final ClassPath.ClassInfo info : ClassPath.from(loader).getTopLevelClasses()) {
if (info.getName().startsWith("tests.")) {
allClasses.add(info.load());
}
}
推荐阅读
- ios - 带有 Flipper pod 和安装后挂钩的 React Native v0.62.2 中的问题
- r - 如何在 R Shiny 中更改谷歌气泡图的播放速度?
- javascript - 如何与 Puppeteer/Javascript 同时运行脚本?
- powershell - 如何在 Powershell 中干净地显示多个哈希表?
- rtf - 总和在 BI Publisher 中的 for-each-group 标记内不起作用
- javascript - Javascript 必需属性不适用于 e.preventDefault
- git - 如何将捆绑文件(实际上是目录)作为二进制文件提交到 Git
- django - 如何以更新形式显示 django 标签(django-taggit)?
- drop-down-menu - 如何区分下拉菜单中选择的值
- python - 如何替换熊猫数据框中包含括号或数字的列中的那些条目?