java - (Class<?>) 和 getClass() 有什么区别?

标签 java object casting

考虑这两行:

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

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

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

最佳答案

您的 loadMethod 似乎已返回 Class 类型的对象。因此,当您对其调用 getClass() 时,它会返回 java.lang.Class.class,而不是您加载的内容。转换您加载的内容不会更改底层对象,即您的文件名的类实例。

也就是说,如果您想返回 Integer 类型的类对象,您将:

返回 Integer.class;

你的第一行正在做

返回 Integer.class.getClass();

这样你就得到了代表类型类本身的类对象,而不是类型整数。

关于java - (Class<?>) 和 getClass() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13216981/

相关文章:

Swift 3 - 定义可能有两种类型的字典

winapi - 了解 : conversion from long_ptr to bool possible loss of data

java - Jersey - 以编程方式获取 HOST IP 和 PORT

java - 当 n 为偶数时优化 x^n 的递归方法

java - CDI和EJB,安全问题?

c++ - 为什么 const_cast 需要说明你要转换到什么?

javascript - 在javascript中将字节数组转换为字符串

java - 我有一个日期列表,我想在 pja 查询中成对使用 then ,直到所有日期都在 java 中使用结束

在对象数组上使用函数变量时的 Javascript 'undefined'

C++ - 从 valgrind 中删除无效