有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何定义布尔值为true或false的名称

我的程序有许多布尔输入为真或假的函数。逻辑是当它离开时,它是真的;当它是正确的,它是错误的

因此,与其打字

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

我希望能够像这样调用myFunction:

myFunction(LEFT)
myFunction(RIGHT)

所以我的程序更容易理解

简而言之,如何在JAVA中定义具有布尔值的名称


共 (4) 个答案

  1. # 1 楼答案

    在我看来,布尔值并不是最适合你的情况,因为你的目标不是检查真或假,而是看你想要的方向。如果你使用了布尔值,哪个方向应该被认为是“真的”?哪个是假的?如果你想上下累加呢?再说一次,布尔值似乎不太合适

    看起来最好的选择是使用枚举:

    enum Direction {
      LEFT, RIGHT
    }
    

    然后定义你的方法:

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

    这为您提供了编译时类型检查和自文档(根据注释中的@sqrfv)的优势,因此比使用字符串或布尔值要好得多。还要注意,枚举可以有参数和方法,因此比字符串或布尔类型强大得多


    例如,我想使用一个枚举来为一个Swing key Bindings项目将按键笔划与方向关联起来,并创建了一个实际称为方向的枚举,如下所示:

    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;
       }
    }
    
  2. # 2 楼答案

    查看定义常量。根据你的使用情况,你会希望它们是公共的/受保护的/私人的

    static final boolean LEFT = true;

    static final boolean RIGHT = false;

    编辑:使正确为假

  3. # 3 楼答案

    Final int LEFT = 0
    Final int RIGHT = 1
    

    我就是这样击键的,只不过有向前和向后两个键

  4. # 4 楼答案

    使用final变量,final确保不能更改变量的值

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

    然后你可以像这样使用它们

    myFunction(LEFT)
    myFunction(RIGHT)