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

时间:2012-11-04 07:47:36

标签: java object casting

考虑以下两行:

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

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

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

1 个答案:

答案 0 :(得分:5)

您的loadMethod似乎已经返回Class类型的对象。所以当你打电话给getClass()时,它会给你java.lang.Class.class,而不是你加载的东西。对你加载的东西进行强制转换不会改变底层对象,即文件名的Class实例。

也就是说,如果你想返回Type Integer的Class Object,你会:

return Integer.class;

你的第一行是

return Integer.class.getClass();

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