1

在我的一个项目中,我使用 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 个元素。我不明白为什么。两台计算机上的代码相同,包相同,类也相同。

4

1 回答 1

0

这是因为番石榴版本。出于某种原因,在第一台计算机上使用的 Guava-14 在那里工作正常,但在第二台计算机上我不得不用 Guava-22 替换它。但在此之后一切正常。

于 2017-07-23T11:36:43.107 回答