有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反射在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();

我如何判断这两种类型相等


共 (3) 个答案

  1. # 1 楼答案

    你的意思是把布尔基元转换成布尔对象,是吗? 要将基本体转换为对象,请执行以下操作:

    boolean bPrimitive = true;
    Boolean bObject = Boolean.valueOf(bPrimitive);
    

    要将对象转换为基本体,请执行以下操作:

    bPrimitive = bObject.booleanValue();
    

    希望这有帮助

  2. # 2 楼答案

    要判断类型是否相等,请调用^{

    if (returnType.equals(paramType)) {
        // Same type
    } else {
        // Different type
    }
    

    在您的示例中,将执行else子句,因为booleanBoolean不是相同的类型,即^{}不等于^{}(表示基本类型{}的Class对象)

  3. # 3 楼答案

    这些类型并不相同booleanBoolean是不同的类型

    因此,如果希望视为在某些(反射)上下文中相等,那么应用程序的逻辑必须处理这个问题

    记录在案:

    • 类型boolean的运行时表示可以通过Boolean.TYPEboolean.class获得

    • 类型Boolean的运行时表示可以通过Boolean.TRUE.getClass()Boolean.class获得。注意案例中的差异

    • 如果以反射方式查找方法或构造函数,则需要提供正确的参数类型。反射API(通常)不理解用于消除重载方法歧义的JLS规则

    • 使用Method.invoke时,需要传递包装为Booleanboolean参数

    以上内容适用于所有基本类型及其各自的包装器类型