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

Java 确定方法是否返回原语的最佳方法?,java,reflection,Java,Reflection,我正在浏览一个方法列表,希望识别那些返回原语(或原语包装类)的方法。除了一个大的开关语句之外,还有什么简单的方法可以做到这一点吗 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) {

我正在浏览一个方法列表,希望识别那些返回原语(或原语包装类)的方法。除了一个大的
开关
语句之外,还有什么简单的方法可以做到这一点吗

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.");
    }
}
Method[]methods=fooObj.getClass().getMethods();
for(int i=0;i如果(???){/在我对返回类型比较的建议中-
您可以使用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");
            }
        }
  }

}
import java.lang.reflect.Method;
课例{
公共空间m1(){
系统输出打印项次(“不返回”);
}
公共int m2(){
返回1;
}
}
公共类MainApp{
公共静态void main(字符串[]args){
示例exp=新示例();
方法[]declaredMethods=exp.getClass().getDeclaredMethods();
对于(方法m:公布方法){
类returnType=m.getReturnType();
if(returnType==void.class){
系统输出打印项次(“不返回”);
}
//这是你的解决方案
if(returnType==Integer.TYPE){
System.out.println(“整数返回”);
}
}
}
}
希望它有用!!

你可以用这种方法

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

也许能帮上忙。@LAD对此表示抱歉。我想我应该一直寻找最简单的解决方案。所以,这是有帮助的吗?@LAD当然。考虑到java处理原语的有趣方式(一切都是对象)我把注意力集中在更具创造性的东西上,忘记了检查API。但是,我会接受这个解决方案!很酷,很乐意帮助。这比我们要避免的切换语句更糟糕。类有一个方法是原始的。只是使用它。同意,我没有专注于交换PAR思想,如果要进行类型比较的条件。place Conditional with Polymorphics可能很有用,因为我们需要创建与条件的分支匹配的子类。在这些子类中,创建一个共享方法,并将代码从条件的相应分支移动到它。然后用相关的方法调用替换条件。其结果是将获得正确的实现根据对象类,通过多态性进行编辑。