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!

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 

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

5
Ich wünschte, mehr Leute auf SO würden mit solch minimalen und informativen Antworten antworten.
James Watkins



0

Es gibt einen anderen, vielleicht weniger konventionellen Weg:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.