确定方法是否返回原语的最佳方法?

时间:2018-06-09 01:12:29

标签: java reflection

我正在查看方法列表,并希望识别那些返回原语(或原始包装类)的方法。除了一个很大的switch声明之外,还有一种简单的方法可以做到这一点吗?

Method[] methods = fooObj.getClass().getMethods();
for(int i = 0; i < methods.length; i++) {
    Method m = methods[i];
    Class c = m.getReturnType();
    if(c == void.class) {
        println("does not return anything.");
    }
    if( ??? ) {  // <--- what expression to use?
        println("a primitive, or primitive wrapper, is returned.");
    }
}

2 个答案:

答案 0 :(得分:0)

您可以这样使用commons-lang ClassUtils

Arrays
        .stream(Example.class.getDeclaredMethods())
        .filter(method -> ClassUtils.isPrimitiveOrWrapper(method.getReturnType()))
        .collect(Collectors.toList());

答案 1 :(得分:-1)

在我对返回类型比较的建议中 - 您可以使用if(returnType == Integer.TYPE)){...}

示例示例:

import java.lang.reflect.Method;

class Example {

   public void m1() {
        System.out.println("No return");
   }

   public int m2() {
       return 1;
    }
}

public class MainApp {

public static void main(String[] args) {
        Example exp=new Example();
        Method[] declaredMethods = exp.getClass().getDeclaredMethods();
        for(Method m:declaredMethods) {
            Class<?> returnType = m.getReturnType();

            if(returnType==void.class) {
                System.out.println("No return");
            }

            //here is your solution 
            if(returnType==Integer.TYPE) {
                System.out.println("Integer return");
            }
        }
  }

}

希望它有用!!