【问题标题】:Type mismatch: cannot convert from integer to boolean类型不匹配:无法从整数转换为布尔值
【发布时间】:2012-03-05 12:37:01
【问题描述】:
public boolean clearSelection() {
    int i = 0;
    if (!this.m_SelectedComps.isEmpty()) {
        i = 1;
        Iterator localIterator = this.m_SelectedComps.iterator();
        while (localIterator.hasNext())
            ((AnnotComponent) localIterator.next()).remove();
        this.m_SelectedComps.clear();
    }

    return i;
}

如何将整数转换为布尔值?

【问题讨论】:

  • Java 不像 C++。在 C++ 中 0 为假,其他整数为真,在 Java 中整数不能用作布尔值。
  • 整数的用途是什么?对于您的示例,没有明显的理由使用布尔值以外的任何东西。 @shift66 该功能不是 C++ 特定的。这是一般规则。除了不能将 int 转换为 bool 的 JAVA 之外,我无法记住另一种语言。

标签: java android type-conversion


【解决方案1】:

您不能在 Java 中在整数和布尔值之间进行类型转换,但您可以使用以下我经常使用的技术:

将布尔值转换为整数:

int i;
return i != 0;

将整数转换为布尔值:

boolean b;
return b ? 1 : 0;

【讨论】:

    【解决方案2】:

    将 int 转换为布尔值:

    return i > 0;
    

    【讨论】:

      【解决方案3】:

      我知道这个帖子很旧,但想添加一些对我有帮助的代码,并可能帮助其他人搜索这个...

      您可以使用 org.apache.commons.lang api 使用 BooleanUtils 类将 int 转换为布尔值:

      BooleanUtils.toBoolean(int value)
      

      “使用零为假的约定将 int 转换为布尔值。” (Javadocs)


      这里是 Maven 和 Gradle 依赖项,请确保您在链接 http://mvnrepository.com/artifact/org.apache.commons/commons-lang3 上检查您使用的是最新版本

      Maven 依赖:

      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-lang3</artifactId>
          <version>3.4</version>
      </dependency>
      

      Gradle 依赖:

      'org.apache.commons:commons-lang3:3.4'
      

      【讨论】:

      • 正是这样的事情给了 Java 一个坏名声。为什么有人会使用它而不仅仅是value != 0? (这导致使用零为假的约定的布尔值)
      • @SalmanvonAbbas 我不确定我是否遵循。在 C 中,零为假,非零为真。这已被广泛接受。
      • @SalmanvonAbbas Java 存在问题的正当理由有很多,但这只是一个 util 函数。我在这里看到一切都很好。
      • 这是一个很好的用例:为了灵活性,我使用这个库将文本配置值解析为布尔值。这些都将返回 true:'true'、'on'、'y'、't'、'yes'、'TrUe'。我不会添加库来解析 1 和 0。但如果它已经在我的项目中,肯定会使用它。
      【解决方案4】:

      尝试使用此返回

      return i == 1;
      

      或者只是使用布尔值开始(使用更好的名称):

       public boolean clearSelection()
        {
          boolean flag = false;
          if (!this.m_SelectedComps.isEmpty())
          {
            flag = true;
            Iterator localIterator = this.m_SelectedComps.iterator();
            while (localIterator.hasNext())
              ((AnnotComponent)localIterator.next()).remove();
            this.m_SelectedComps.clear();
          }
          return flag;
        }
      

      我继续困惑为什么人们使用i——一个可怕的变量名。看起来像1,没有任何意义。

      【讨论】:

      • 关于i:“计算机科学中只有两件困难的事情:缓存失效和命名事情”——Phil Karlton
      • @Hogan 不确定您使用的是哪种字体,它在我的 IDE 中看起来不像 1
      • i 来自 Fortran。
      • IMO i 来自“迭代”、“迭代器”
      • 我们应该将“真”定义为 1 还是非 0 的所有内容?
      【解决方案5】:

      也许你可以只修改你的 return 语句,而不需要对下面的代码做太多改动:

      return i > 0 ? true : false ;
      

      【讨论】:

      • 很好,但是如果 int 等于 0 怎么办!即使你使用 >= 它也不起作用,因为当 int 为 null 时,这行代码将始终返回 true。
      • 三元运算符是多余的。写return i &gt; 0;就够了。
      【解决方案6】:
      public boolean clearSelection(){
          int i = 0;
          if (!this.m_SelectedComps.isEmpty())
          {
              i = 1;
              Iterator localIterator = this.m_SelectedComps.iterator();
              while (localIterator.hasNext())
                  ((AnnotComponent)localIterator.next()).remove();
              this.m_SelectedComps.clear();
           }
           return (i!=0);
      }
      

      【讨论】:

        【解决方案7】:

        将 i 声明为布尔值:

        public boolean clearSelection()
        {
            boolean i = false;
            if (!this.m_SelectedComps.isEmpty())
            {
                i = true;
                Iterator localIterator = this.m_SelectedComps.iterator();
                while (localIterator.hasNext())
                  ((AnnotComponent)localIterator.next()).remove();
                this.m_SelectedComps.clear();
            }
            return i;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-06-20
          • 2018-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多