(Class <?>)和getClass()之间有什么区别?

Mar*_*ius 0 java casting object

考虑以下两行:

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

return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));
Run Code Online (Sandbox Code Playgroud)

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

Aff*_*ffe 5

loadMethod似乎已经返回Class类型的对象.因此,当你打电话getClass()给它时,它会让你java.lang.Class.class回来,而不是你装的东西.转换您加载的东西不会更改底层对象,这是您的文件名的Class实例.

也就是说,如果要返回类型整数的类对象,您将:

return Integer.class;

你的第一线是做的

return Integer.class.getClass();

因此,您将获得表示Type类本身的Class对象,而不是Type Integer.