Wie man durch Reflexion feststellt, ob eine Methode 'void' zurückgibt

74

Ich habe ein java.lang.reflect.MethodObjekt und möchte wissen, ob es sich um einen Rückgabetyp handelt void.

Ich habe die Javadocs überprüft und es gibt eine getReturnType()Methode, die ein Class-Objekt zurückgibt. Die Sache ist, dass sie nicht sagen, was der Rückgabetyp wäre, wenn die Methode ungültig ist.

Vielen Dank!

Pablo Fernandez
quelle

Antworten:

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

Schnelle Probe:

$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 
OscarRyz
quelle
Aus irgendeinem Grund mit 6 Java hatte ich ersetzen Void.TYPEmit Void.classsonst die Prüfung fehlschlagen würde immer. Ideen warum?
Giovanni Botta
2
@GiovanniBotta Void.TYPE ist dasselbe wie void.class und repräsentiert den primitiven Typ void. Void.class repräsentiert den Referenztyp Void. Vielleicht gibt Ihre Methode Void statt void zurück.
Bax
23
method.getReturnType()==void.class     √

method.getReturnType()==Void.Type      √

method.getReturnType()==Void.class     X
Lakai
quelle
5
Ich wünschte, mehr Leute auf SO würden mit solch minimalen und informativen Antworten antworten.
James Watkins
11

method.getReturnType()gibt void.class/ zurück Void.TYPE.

Tom Hawtin - Tackline
quelle
8

Es kehrt zurück java.lang.Void.TYPE.

James Keesey
quelle
0

Es gibt einen anderen, vielleicht weniger konventionellen Weg:

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

Nom1fan
quelle