我有两种方法,一种是void setA(Boolean a)
,另一种是// set method param type
Class<?> paramType = m2.getParameterTypes()[0];
// get method return type
Class<?> returnType = m1.getReturnType();
我需要判断get方法返回类型是否等于set方法param类型来做某事。
{{1}}
我怎样判断这两种类型是否相等?
答案 0 :(得分:3)
类型不相等。 boolean
和Boolean
是不同的类型。
因此,如果你想在某些(反思)上下文中将视为,那么你的应用程序的逻辑就必须处理它。
记录:
可以通过boolean
或Boolean.TYPE
获取boolean.class
类型的运行时表示形式。
可以通过Boolean
或Boolean.TRUE.getClass()
获取Boolean.class
类型的运行时表示形式。请注意案例中的差异!
如果您反复查找方法或构造函数,则需要提供正确的参数类型。反射API(通常)不理解用于消除重载方法歧义的JLS规则。
使用Method.invoke
时,您需要传递一个boolean
参数,其中包含Boolean
。
以上内容适用于所有原始类型及其各自的包装类型。
答案 1 :(得分:0)
要判断如果类型相同,请致电equals()
:
if (returnType.equals(paramType)) {
// Same type
} else {
// Different type
}
在您的示例中,else
子句将会执行,因为boolean
和Boolean
的类型不同,即Boolean.class
不等于Boolean.TYPE
(表示基元类型的Class
对象 boolean
)。
答案 2 :(得分:-1)
你的意思是将布尔基元转换为布尔对象,不是吗? 要将原语转换为Object:
boolean bPrimitive = true;
Boolean bObject = Boolean.valueOf(bPrimitive);
将Object转换为基元:
bPrimitive = bObject.booleanValue();
希望得到这个帮助。