java:循环上两个布尔值(false,true)

Jas*_*n S 14 java loops boolean

这是一个风格问题.我想用一个on设置为false 的变量循环两次,然后变为true.其中哪一个更清楚:

一个)

for (final boolean on : new boolean[] { false, true} )
{
   doStuffBasedOnABooleanFlag(on);
}
Run Code Online (Sandbox Code Playgroud)

B)

for (int i = 0; i < 2; ++i)
{
   final boolean on = (i == 1);
   doStuffBasedOnABooleanFlag(on);
}
Run Code Online (Sandbox Code Playgroud)

C)别的东西


编辑:墨菲的无意识解释定律开始发挥作用......我原来看起来像这样的用例而不是doStuffBasedOnABooleanFlag:

for (final boolean on : new boolean[] { false, true} )
{
   JButton button = on ? onButton : offButton;
   button.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent event) {
      doStuffLaterBasedOnABooleanFlag(on);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

但我想我喜欢Brendan的答案,我只是将循环内容重构为一个单独的方法:

doStuffBasedOnABooleanFlag(false);
doStuffBasedOnABooleanFlag(true);

   ...

private void doStuffBasedOnABooleanFlag(final boolean on)
{
   JButton button = on ? onButton : offButton;
   button.addActionListener(new ActionListener() {
      @Override public void actionPerformed(ActionEvent event) {
      doStuffLaterBasedOnABooleanFlag(on);
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

Rei*_*ica 23

由于它是两行,我只是跳过循环并执行:

doStuffBasedOnABooleanFlag(false);
doStuffBasedOnABooleanFlag(true);
Run Code Online (Sandbox Code Playgroud)

代码更少,更明显,更高效.


Fab*_*eeg 11

另一种选择是避免使用布尔值并使用枚举:

enum Mode { APPEND, REPLACE } // or whatever your boolean indicated
Run Code Online (Sandbox Code Playgroud)

然后你可以迭代:

for(Mode m : Mode.values()) doStuff(m);
Run Code Online (Sandbox Code Playgroud)

或者直接打电话:

doStuff(Mode.APPEND);
doStuff(Mode.REPLACE);
Run Code Online (Sandbox Code Playgroud)

这样做的好处是API可以更清楚地表明发生了什么.