为啥编译器没有注意到布尔值已被声明为真?
Posted
技术标签:
【中文标题】为啥编译器没有注意到布尔值已被声明为真?【英文标题】: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 它说布尔值始终为假,但在一种方法中,我将该布尔值传递为真 【参考方案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
【讨论】:
以上是关于为啥编译器没有注意到布尔值已被声明为真?的主要内容,如果未能解决你的问题,请参考以下文章