基本类型类的用途/目的是什么?
问题内容:
我最近了解到JVM中有原始类型的类表示形式。例如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
参数的方法。)
在通过反射调用参数时,我曾经使用过这些类来提供参数的默认值。基于参数类型,我使用null
了任何引用类型,并且为每种原始类型使用了一些(显然是带盒装的)原始值。