0

考虑这两行:

return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();

return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));

当我使用第一行运行我的应用程序时,它不能按预期工作。当我使用第二行运行我的应用程序时,它确实可以正常工作。我不觉得这背后的代码是相关的,因为我的观点是这两行之间的行为是不同的。为什么他们的行为不同?getClass() 返回 Class 并且类型转换将对象转换为 Class - 所以最终结果应该是相同的。但是,两者的行为方式不同。

4

1 回答 1

5

您的 loadMethod 似乎已经返回了 Class 类型的对象。因此,当您调用它时getClass(),它会回馈您java.lang.Class.class,而不是您加载的东西。转换你加载的东西不会改变底层对象,它是你文件名的 Class 实例。

也就是说,如果你想返回类型整数的类对象,你会:

return Integer.class;

你的第一行正在做

return Integer.class.getClass();

所以你得到代表类型类本身的类对象,而不是类型整数。

于 2012-11-04T07:54:37.147 回答