如何比较原始类类型?像Integer和Void一样?

时间:2013-05-25 20:54:42

标签: java class types

我想将方法​​的返回类型与某些类(如intvoidString等进行比较。

我使用了这样的代码:

始终打印"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");
}

3 个答案:

答案 0 :(得分:8)

您的代码似乎没问题,但有一点问题:

Class type = m.getReturnType(); 
boolean result = type.equals(Integer.class);
如果result的返回类型属于true类,

m此处仅评估为Integer

如果是int评估为false

要检查返回类型是否也是基本类型,您需要与Integer.TYPE(不是.class进行比较,并与其他类型进行比较。


所以改变你的代码:

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

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

并对其他类型执行相同操作。这将匹配Integer getAge()int getAge()等方法。

答案 1 :(得分:4)

使用Class.TYPE

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

由于这是java.lang.reflect.Method课程,因此在这种情况下您无法使用instanceof

答案 2 :(得分: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
  }
}