我想将方法的返回类型与某些类(如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");
}
答案 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
}
}