我有两个方法,一个是boolean getA(),另一个是void setA(Boolean a)。
我需要判断get方法返回类型等于set方法param类型来做某事。
// set method param type
Class<?> paramType = m2.getParameterTypes()[0];
// get method return type
Class<?> returnType = m1.getReturnType();我怎么能判断这两种类型相等?
发布于 2017-01-11 03:55:07
类型不相等。boolean和Boolean是不同的类型。
因此,如果您想在某些(反射)上下文中将它们视为相等,则应用程序的逻辑必须处理这个问题。
请记录在案:
boolean的运行时表示可以通过Boolean.TYPE或boolean.class获得。Boolean的运行时表示可以通过Boolean.TRUE.getClass()或Boolean.class获得。请注意以防万一的差异!Method.invoke时,需要传递包装为Boolean的boolean参数。上述内容适用于所有原语类型及其各自的包装器类型。
发布于 2017-01-11 04:03:30
若要判断类型是否相等,请调用equals()
if (returnType.equals(paramType)) {
// Same type
} else {
// Different type
}在您的示例中,将执行else子句,因为boolean和Boolean不是相同的类型,也就是说Boolean.class不等于Boolean.TYPE (表示基本类型boolean的Class对象)。
发布于 2017-01-11 03:55:14
你的意思是把布尔原语转换成布尔对象,不是吗?若要将原语转换为对象:
boolean bPrimitive = true;
Boolean bObject = Boolean.valueOf(bPrimitive);将对象转换为原语:
bPrimitive = bObject.booleanValue();希望能帮上忙。
https://stackoverflow.com/questions/41582307
复制相似问题