如何通过反射确定一个方法是否返回'void'

82

我有一个 java.lang.reflect.Method 对象,我想知道它的返回类型是否为 void

我已经检查过Javadocs,发现有一个getReturnType()方法可以返回一个Class对象。问题是,如果这个方法返回类型是void,文档中没有明确说明会返回什么。

谢谢!

5个回答

126
if( method.getReturnType().equals(Void.TYPE)){
    out.println("It does");
 }

快速示例:

$cat X.java  

import java.lang.reflect.Method;


public class X {
    public static void main( String [] args ) {
        for( Method m : X.class.getMethods() ) {
            if( m.getReturnType().equals(Void.TYPE)){
                System.out.println( m.getName()  + " returns void ");
            }
        }
    }

    public void hello(){}
}
$java X
hello returns void 
main returns void 
wait returns void 
wait returns void 
wait returns void 
notify returns void 
notifyAll returns void 

1
由于某些原因,在Java 6中,我不得不将Void.TYPE替换为Void.class,否则检查总是失败。有什么想法吗? - Giovanni Botta
3
@GiovanniBotta Void.TYPE与void.class相同,表示原始类型void。Void.class表示引用类型Void。因此,您的方法可能返回Void而不是void。 - Bax

35
method.getReturnType()==void.class     √

method.getReturnType()==Void.Type      √

method.getReturnType()==Void.class     X

7
希望在 Stack Overflow 上有更多人能够给出简洁明了的回答。 - James Watkins

11

method.getReturnType()方法返回void.class/Void.TYPE


8
它返回java.lang.Void.TYPE

0

还有一种或许不太传统的方法:

public boolean doesReturnVoid(Method method) { if (void.class.equals(method.getReturnType())) return true; }


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接