反射在java中如何判断布尔等于布尔或long等于long?
我有两种方法,一种是boolean getA()
,另一种是void setA(Boolean a)
我需要判断get方法返回类型是否等于set方法param type才能执行某些操作
// set method param type
Class<?> paramType = m2.getParameterTypes()[0];
// get method return type
Class<?> returnType = m1.getReturnType();
我如何判断这两种类型相等
# 1 楼答案
你的意思是把布尔基元转换成布尔对象,是吗? 要将基本体转换为对象,请执行以下操作:
要将对象转换为基本体,请执行以下操作:
希望这有帮助
# 2 楼答案
要判断类型是否相等,请调用^{:
在您的示例中,将执行} 不等于^{} (表示基本类型{}的
else
子句,因为boolean
和Boolean
不是相同的类型,即^{Class
对象)# 3 楼答案
这些类型并不相同
boolean
和Boolean
是不同的类型因此,如果希望将视为在某些(反射)上下文中相等,那么应用程序的逻辑必须处理这个问题
记录在案:
类型
boolean
的运行时表示可以通过Boolean.TYPE
或boolean.class
获得类型
Boolean
的运行时表示可以通过Boolean.TRUE.getClass()
或Boolean.class
获得。注意案例中的差异如果以反射方式查找方法或构造函数,则需要提供正确的参数类型。反射API(通常)不理解用于消除重载方法歧义的JLS规则
使用
Method.invoke
时,需要传递包装为Boolean
的boolean
参数以上内容适用于所有基本类型及其各自的包装器类型