Java “void.class”表示什么?
在我的代码中,我(意外地)写了Java “void.class”表示什么?,java,class,primitive-types,Java,Class,Primitive Types,在我的代码中,我(意外地)写了void.class(不是void.class),编译器欣然接受了。直到现在,我还以为primite不是真正的对象(这里不仅是void,还谈到int,等等),所以它们没有类 我说的是所有的“原始类”。每个基元类型都有一个由.class表示的类,例如float.class 这样的“基本类”(例如,void.Class)指的是什么“Class” 这些“基本类”的可能用例是什么? 特别是,他们是否提供构造函数 我们是否可以进行有意义的实例检查,如int.class.i
void.class
(不是void.class
),编译器欣然接受了。直到现在,我还以为primite不是真正的对象(这里不仅是void
,还谈到int
,等等),所以它们没有类
我说的是所有的“原始类”。每个基元类型都有一个由.class
表示的类,例如float.class
- 这样的“基本类”(例如,
)指的是什么“void.Class
”Class
- 这些“基本类”的可能用例是什么?
- 特别是,他们是否提供构造函数
- 我们是否可以进行有意义的实例检查,如
int.class.isInstance(2.3f)
void.class
是返回void的方法的返回类型,如下面的main
方法:-
import java.lang.reflect.Method;
public class A{
public static void main(String[] args) throws NoSuchMethodException, SecurityException{
Method mh = A.class.getMethod("main",String[].class);
System.out.println(mh.getReturnType() == void.class);
}
}
void.class
是反射中用于指示方法具有void
返回类型的对象。如果您编写method.getReturnType()代码>,可能会返回此对象
int.class
可以表示参数和返回类型
您可以编写int.class.isInstance(…)
,但它将始终返回false
,因为参数是对象
没有类
对象具有可访问的构造函数
int.class.getConstructors()
和int.class.getDeclaredConstructors()
都返回空数组。基本类型没有构造函数。类的第一个明显问题是它还表示接口:)
在java5之前,Class
用于表示所有java类型,包括基本类型。这是出于方便,而且效果很好
泛型引入后,java类型变得更加丰富<代码>java.lang.reflect.Type
被引入以包括所有类型。不幸的是,它合并了旧的凌乱的类
,造成了更大的混乱。Type
的层次结构毫无意义
现在,void
甚至不是一种类型!因此Class
还包括一个非类型。正如其他答案所示,这是出于方便。同样,WildcardType扩展了类型
void
一开始是否可以设计为一种类型?为什么不呢?它是0
位的基本类型,只有一个值(aka,一种单位类型)。我不知道如果人们写信,我会有什么感觉
void foo(void param){
param = bar(); // void bar(){...}
但如果我能写,至少我会很高兴
void foo(...){
return bar();
另请参见John Rose的isInstance的javadoc的可能副本:如果该类对象表示基元类型,则该方法返回false。@DavidItarenco该问题不涉及
void.Class
,也不涉及其他基元类,例如int.Class
(顶部答案-包括注释-有点)@WorldSEnder:明白了,谢谢你的澄清!“没有类对象有可访问的构造函数”我确信OP的意思是Class.getConstructors()
,而不是类
构造函数本身。@TavianBarnes你说得对-它很可能是这个意思。我添加了最后一句话。如果有人感兴趣的话,这是一个更简洁的java类型表示-