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是反射中使用的返回类型Void的占位符

示例:-
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类型表示-