如何通过反射确定方法是否返回“ void”


Answers:


115
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 

由于某些原因,我必须用Java 6替换Void.TYPEVoid.class否则检查将始终失败。想法为什么?
Giovanni Botta 2014年

2
@GiovanniBotta Void.TYPE与void.class相同,表示原始类型void。Void.class表示引用类型Void。因此,也许您的方法返回Void而不是void。
巴克斯

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

method.getReturnType()==Void.Type      √

method.getReturnType()==Void.class     X

5
我希望更多的SO这样的人以如此简单和有益的回答来回应。
James Watkins



0

还有另一种可能不太传统的方式:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.