考虑以下两行:
return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();
return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));
当我使用第一行运行我的应用程序时,它无法正常工作。当我使用第二行运行我的应用程序时,它确实可以正常工作。我不认为这背后的代码是相关的,因为我的观点是两条线之间的行为是不同的。他们为什么表现不同? getClass()返回Class,并且类型转换将对象强制转换为Class - 因此最终结果应该相同。但是,两者表现不同。
答案 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。