1

我想将方法​​的返回类型与某些类(如int, void,String等)进行比较。

我使用了这样的代码:

它总是打印"null"

Class type = m.getReturnType(); 
if (type.equals(Integer.class)) {
    System.out.print("0");
} else if (type.equals(Long.class)) {
    System.out.print("1");
} else if (type.equals(Boolean.class)) {
    System.out.print("2");
} else if (type.equals(Double.class)) {
    System.out.print("3");
} else if (type.equals(Void.class)) {
    System.out.print("4");
} else {
    System.out.print("null");
}
4

3 回答 3

9

您的代码看起来不错,但有一个小问题:

Class type = m.getReturnType(); 
boolean result = type.equals(Integer.class);

result这里只会评估trueifm的返回类型是否属于Integer该类。

如果它是int将评估为false

要检查返回类型是否也是原始类型,您需要与Integer.TYPE(not .class)进行比较,并且与其他类型类似。


所以改变你的代码:

if (type.equals(Integer.class)) {

if (type.equals(Integer.class) || type.equals(Integer.TYPE)) {

并为其他类型做同样的事情。这将匹配 和 之类Integer getAge()的方法int getAge()

于 2013-05-25T21:04:59.183 回答
4

利用Class.TYPE

if (type.equals(Integer.TYPE)) {
    ...
}

由于这是一个类,因此在这种情况下java.lang.reflect.Method您不能使用。instanceof

于 2013-05-25T20:55:42.047 回答
0

我猜你是在比较 Wrapper 类型和它们的原始对应物——这些是不一样的。

例子:

interface Methods {
  int mInt();
  Integer mInteger();

  void mVoid();

}

class Sample {
  public static void main(String[] args) throws Exception {
    Method mInt = Methods.class.getMethod("mInt", new Class[0]);
    Method mInteger = Methods.class.getMethod("mInteger", new Class[0]);
    Method mVoid = Methods.class.getMethod("mVoid", new Class[0]);


    mInt.getReturnType(); // returns int.class
    mInteger.getReturnType(); // returns Integer.class
    mVoid.getReturnType(); // returns void.class
  }
}
于 2013-05-25T21:11:13.430 回答