簡體   English   中英

如何定義具有布爾值true或false的名稱

[英]How to define a name that has boolean value true or false

我的程序有很多函數,布爾輸入為true或false。 邏輯是它何時離開,這是真的; 當它是對的時候,這是錯誤的。

所以不要打字

myFuncton(true) //input is left
myFunction(false) //input is right

我希望能夠像這樣調用myFunction:

myFunction(LEFT)
myFunction(RIGHT)

所以理解我的程序要容易得多

簡而言之,如何在JAVA中使用布爾值定義名稱?

在我看來,布爾值最適合您的情況,因為您的目標不是檢查是真是假,而是查看所需的方向。 如果你確實使用了布爾值,那么哪個方向應該被認為是“真”? 哪個假? 如果你想要添加UP和DOWN怎么辦? 同樣,布爾值似乎不太適合。

看起來你最好的選擇是使用枚舉:

enum Direction {
  LEFT, RIGHT
}

然后定義您的方法:

public void myFunction(Direction dir) {
  if (dir == Direction.LEFT) {
    // go left
  } else {
    // go right
  }
}

這為您提供了編譯時類型檢查和自我文檔的優勢(根據注釋中的@sqrfv),因此比使用String或布爾值要好得多。 另請注意,枚舉可以包含參數和方法,因此比String或boolean類型更強大。


例如,我想使用枚舉將鍵擊與Swing Key Bindings項目的方向相關聯,並創建一個實際上稱為Direction的枚舉,如下所示:

enum Direction {
   UP("Up", KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0)),
   DOWN("Down", KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0)),
   LEFT("Left", KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, 0)),
   RIGHT("Right", KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, 0));

   Direction(String text, KeyStroke keyStroke) {
      this.text = text;
      this.keyStroke = keyStroke;
   }
   private String text;
   private KeyStroke keyStroke;

   public String getText() {
      return text;
   }

   public KeyStroke getKeyStroke() {
      return keyStroke;
   }

   @Override
   public String toString() {
      return text;
   }
}

然后在我的鍵綁定中使用它,如下所示:

class Board2 extends JPanel {
   private static final int PREF_W = 200;
   private static final int PREF_H = 400;
   public static final String DIRECTION = "direction";
   private Direction direction = null;

   public Board2() {
      setBorder(BorderFactory.createTitledBorder("Board2"));
      InputMap inputMap = getInputMap(WHEN_IN_FOCUSED_WINDOW);
      ActionMap actionMap = getActionMap();

      for (Direction dir : Direction.values()) {
         inputMap.put(dir.getKeyStroke(), dir.getText());
         actionMap.put(dir.getText(), new MyArrowBinding(dir));
      }
   }

   private class MyArrowBinding extends AbstractAction {
      private Direction dir;

      public MyArrowBinding(Direction dir) {
         super(dir.getText());
         this.dir = dir;
         putValue(ACTION_COMMAND_KEY, dir);
      }

      @Override
      public void actionPerformed(ActionEvent e) {
         setDirection(dir);
      }
   }

   @Override
   public Dimension getPreferredSize() {
      return new Dimension(PREF_W, PREF_H);
   }

   public void setDirection(Direction direction) {
      Direction oldValue = this.direction;
      Direction newValue = direction;
      this.direction = newValue;

      firePropertyChange(DIRECTION, oldValue, newValue);
   }

   public Direction getDirection() {
      return direction;
   }
}

使用final變量,final確保您無法更改變量的值。

final boolean LEFT = true; 
final boolean RIGHT = false;

然后你可以像這樣使用它們

myFunction(LEFT)
myFunction(RIGHT)

查看定義常量。 根據您的使用情況,您需要公開/受保護/私密。

static final boolean LEFT = true;

static final boolean RIGHT = false;

編輯:做錯了。

Final int LEFT = 0
Final int RIGHT = 1

這就是我按鍵的方式,除了包含前進和后退。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM