我最近了解到JVM中有原始类型的类表示形式。例如int.class,double.class甚至一个void.class。
int.class
double.class
void.class
我不明白的是 为什么会有 这些。它们似乎没有发挥任何功能性作用。使用反射,我搜索了所有类,它们没有构造函数,没有方法并且没有字段。出于所有目的和目的,它们似乎是空的和无用的。基本类型变量甚至都不是其各自类的实例,如以下返回false所示:
int a = 3; int.class.isInstance(a);
那么为什么它们存在呢?它们必须达到某种目的,也许是为了编译器之类的,但无论它是什么,完全超出了我的范围。甚至int.class在Integer API中也有明确的引用(同样对于每种基本类型及其各自的包装对象)。在JLS中,我无法找到任何关于它们存在的参考,更不用说它们的使用了。
我不明白的是为什么会有这些。
考虑以下:
public int foo() { return 0; } ... Method method = someClass.getDeclaredMethod("foo"); Class<?> clazz = method.getReturnType();
没有的Class表示int,以上内容将返回什么?它不应该返回,Integer.class因为它们 不是 同一件事。(想象一下,试图区分重载的方法,一个是重载的方法,另一个int是带Integer参数的方法。)
Class
int
Integer.class
Integer
在通过反射调用参数时,我曾经使用过这些类来提供参数的默认值。基于参数类型,我使用null了任何引用类型,并且为每种原始类型使用了一些(显然是带盒装的)原始值。
null