在我的一个项目中,我使用 Guava 从命令行获取类名,然后调用适当的构造函数。用户使用以下内容运行 .bat 文件:
java -jar MyClass.jar 其他类
OtherClass 位于某些包中,例如 mypackage.otherpackage。我想在代码中调用它的构造函数。为了找到构造函数,我使用 Guava:
Constructor classConstructor = null;
Set<ClassInfo> classInfos = ClassPath.from(MyClass.class.getClassLoader()).getTopLevelClassesRecursive("mypackage");
List<String> packageNames = classInfos.stream().map(classInfo -> classInfo.getPackageName()).distinct().collect(Collectors.toList());
for (String p : packageNames) {
try {
classConstructor = Class.forName(p + "." + args[0]).getConstructor(String.class);
} catch (ClassNotFoundException ex) {
}
if (classConstructor != null)
break;
}
它在一台计算机上运行完美,但在另一台计算机上根本不起作用,因为ClassPath.from(MyClass.class.getClassLoader()).getTopLevelClassesRecursive("mypackage");
返回 0 个元素。我不明白为什么。两台计算机上的代码相同,包相同,类也相同。