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 - 因此最终结果应该相同.但是,两者表现不同.
loadMethod似乎已经返回Class类型的对象.因此,当你打电话getClass()给它时,它会让你java.lang.Class.class回来,而不是你装的东西.转换您加载的东西不会更改底层对象,这是您的文件名的Class实例.
也就是说,如果要返回类型整数的类对象,您将:
return Integer.class;
你的第一线是做的
return Integer.class.getClass();
因此,您将获得表示Type类本身的Class对象,而不是Type Integer.