考虑这两行:
return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();
return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));
当我使用第一行运行应用程序时,它无法按预期工作。当我使用第二行运行我的应用程序时,它确实按预期工作。我不认为这背后的代码是相关的,因为我的观点是两条线之间的行为是不同的。为什么他们的行为不同? getClass() 返回 Class,并且类型转换将对象转换为 Class —— 因此最终结果应该是相同的。然而,两者的行为不同。
最佳答案
您的 loadMethod 似乎已返回 Class 类型的对象。因此,当您对其调用 getClass()
时,它会返回 java.lang.Class.class
,而不是您加载的内容。转换您加载的内容不会更改底层对象,即您的文件名的类实例。
也就是说,如果您想返回 Integer 类型的类对象,您将:
返回 Integer.class;
你的第一行正在做
返回 Integer.class.getClass();
这样你就得到了代表类型类本身的类对象,而不是类型整数。
关于java - (Class<?>) 和 getClass() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216981/