【问题标题】:How to determine by reflection if a Method returns 'void'如何通过反射确定方法是否返回'void'
【发布时间】:2023-03-18 04:01:02
【问题描述】:

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

我检查了Javadocs 并且有一个getReturnType() 方法返回一个类对象。问题是,如果方法为 void,他们没有说明返回类型是什么。

谢谢!

【问题讨论】:

    标签: java reflection methods


    【解决方案1】:
    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 否则检查将始终失败。想法为什么?
    • @GiovanniBotta Void.TYPE 与 void.class 相同,表示原始类型 void。 Void.class 表示引用类型 Void。所以也许你的方法返回 Void 而不是 void。
    【解决方案2】:
    method.getReturnType()==void.class     √
    
    method.getReturnType()==Void.Type      √
    
    method.getReturnType()==Void.class     X
    

    【讨论】:

    • 我希望 SO 上的更多人能以如此最少且内容丰富的答案做出回应。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      它返回java.lang.Void.TYPE

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-01-16
          • 1970-01-01
          • 2010-11-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-13
          • 1970-01-01
          相关资源
          最近更新 更多