【问题标题】:How to judge boolean equals to Boolean or long equals to Long in java?java中如何判断boolean等于Boolean或long等于Long?
【发布时间】:2017-05-25 17:42:54
【问题描述】:

我有两种方法,一种是boolean getA(),另一种是void setA(Boolean a)
我需要判断 get 方法返回类型是否等于 set 方法参数类型来做某事。

// set method param type
Class<?> paramType = m2.getParameterTypes()[0];
// get method return type
Class<?> returnType = m1.getReturnType();

如何判断这两种类型是否相等?

【问题讨论】:

标签: java reflection return-type


【解决方案1】:

类型不相等。 booleanBoolean 是不同的类型。

因此,如果您希望在某些(反射性)上下文中对待它们是平等的,那么您的应用程序的逻辑必须处理它。

记录在案:

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

  • Boolean 类型的运行时表示可以通过Boolean.TRUE.getClass()Boolean.class 获得。注意大小写的区别!

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

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

以上适用于所有原始类型及其各自的包装类型。

【讨论】:

    【解决方案2】:

    您的意思是将布尔基元转换为布尔对象,不是吗? 将基元转换为对象:

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

    将对象转换为原始对象:

    bPrimitive = bObject.booleanValue();
    

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      判断类型是否相等,调用equals():

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

      在您的示例中,else 子句将执行,因为booleanBoolean 不是同一类型,即Boolean.class 不等于Boolean.TYPEClass 对象表示 原始类型 boolean)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-12
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多