Як за допомогою відображення визначити, чи повертає метод `` void ''


75

У мене є java.lang.reflect.Methodоб’єкт, і я хотів би знати, чи це тип повернення void.

Я перевірив Javadocs, і є getReturnType()метод, який повертає об'єкт Class. Річ у тім, що вони не говорять, яким би був тип повернення, якщо метод недійсний.

Дякую!

Відповіді:


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.TYPEна, Void.classінакше перевірка завжди провалилася. Ідеї ​​чому?
Джованні Ботта

2
@GiovanniBotta Void.TYPE те саме, що void.class і представляє примітивний тип void. Void.class представляє тип посилання Void. Тож, можливо, ваш метод повертає Void замість void.
Bax

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

method.getReturnType()==Void.Type      √

method.getReturnType()==Void.class     X

5
Я бажаю, щоб більше людей на SO відповіли такими мінімальними та інформативними відповідями.
Джеймс Уоткінс,



0

Існує ще один, можливо, менш звичний спосіб:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.