2014-01-09 114 views

回答

3

当它是void.class代表voidvoid不是一个类型,但需要一个类来表示它的某些事情。

例如:

class VoidExample { 
    public static void main(String[] args) throws Exception { 
     System.out.println(
      VoidExample.class 
       .getMethod("main", String[].class) 
        .getReturnType().getName() 
     ); 
    } 
} 
13

它会给你void字符串类字面void类型:

Class<Void> clazz = void.class; 
System.out.println(clazz.getName()); 

参考JLS § 15.8.2进一步阅读:

类文字是一种表达,其中包括类的名称, 接口,数组或原始类型,或伪类型void,后接 由'。'和令牌类。
[...]
void.class(§8.4.5)的类型是Class<Void>

+0

我一直在冲刷JLS,这很有趣,有多少空洞被提及。除了你包含的内容(我没有找到),我找不到任何东西。 – Radiodef

+0

@Radiodef有时只是你达到了正确的话题。而已。我以前去过那里,所以我知道确切的主题;) –

+0

现在我也是。 :P“伪类型”是我一直在寻找的东西。谢谢。 – Radiodef

1

嗯好问题。因为它是开源的,所以建议看看源代码。我会说,当givenClass的类型为java.lang.Void时,它会返回void。

+0

Void是一个不合理的占位符类,用于存放void.class类型'Void.TYPE'。 – gparyani

1

我查了OpenJDK source,可惜GetName()是一个本地方法,所以你必须深入挖掘,找到确切的情况。但是我怀疑,如果您在返回void的方法上致电getReturnType(),那么您会看到这个实际情况。

相关问题