【问题标题】:Why isn't the compiler noticing that a boolean has been declared true?为什么编译器没有注意到布尔值已被声明为真?
【发布时间】:2016-11-10 19:37:47
【问题描述】:

在这个方法中:

 private void implementVisibility(EditText A, EditText B, ImageButton C, boolean visible) {
   if (visible) {
     A.setVisibility(View.VISIBLE);
     B.setVisibility(View.VISIBLE);
     C.setVisibility(View.VISIBLE);
   }
   else if (!visible) {    // warning here
   }
 }

else if (!visible) 行我收到警告:

条件 !visible 始终为真
可见的值总是假的

但是看调用方法:

if (count2.getVisibility() == View.INVISIBLE) {
  implementVisibility(count2, action2, remove2,true);
}

visible true,因此它并不总是为假。为什么编译器没有注意到这一点?

【问题讨论】:

  • 改用else
  • 只需阅读您的代码。首先,您要问“这是真的”;如果不是这种情况,您会问“这不是真的吗”。提示:你不需要第二个问题;这就是布尔值的概念——它不是真就是假。并提示:A、B、C 是变量的真正糟糕名称。我认为禁止每个变量名使用多个字符的法律在 1979 年底被废除了 ;-)
  • 布尔只有两种可能,所以if和else语句就足够了
  • 你的意思是,在行:implementVisibility(count2, action2, remove2,true);编译器必须注意到最后一个参数总是正确的?
  • @berserk 它说布尔值始终为假,但在一种方法中,我将该布尔值传递为真

标签: java android android-studio boolean


【解决方案1】:

当程序控制到达else if(!visible){时,visible只能成为false

您的编译器暗示您应该将代码澄清为 else {

【讨论】:

    【解决方案2】:

    布尔变量只有两个值真或假,所以你应该编辑你的代码如下:

    private void implementVisibility(EditText A, EditText B, ImageButton C, boolean visible) {
            if (visible) {
                A.setVisibility(View.VISIBLE);
                B.setVisibility(View.VISIBLE);
                C.setVisibility(View.VISIBLE);
            }
            else {
                // do something
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 2020-02-01
      • 2022-12-09
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      相关资源
      最近更新 更多