java(类<?>)和getClass()之间有什么区别?
考虑这两条线:
return loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", "")).getClass();
return (Class<?>) loadMethod.invoke(botScriptLoader, file.getName().replaceFirst("\\.class", ""));
当我使用第一行运行我的应用程序时,它不能按预期工作。当我使用第二行运行我的应用程序时,它确实能按预期工作。我不认为这背后的代码是相关的,因为我的观点是,这两行之间的行为是不同的。他们为什么表现不同?getClass()返回Class,typecast将对象强制转换为一个类——因此最终结果应该是相同的。然而,两者的行为却不同
# 1 楼答案
loadMethod似乎已返回Class类型的对象。所以当你打电话给
getClass()
的时候,它给你的是java.lang.Class.class
,而不是你加载的东西。强制转换加载的内容不会更改基础对象,即文件名的类实例也就是说,如果要返回Integer类型的类对象,可以:
return Integer.class;
你的第一句话是
return Integer.class.getClass();
因此,您得到了表示类型类本身的类对象,而不是整数类型