java - 如何定义具有 boolean 值 true 或 false 的名称

标签 java

我的程序有很多函数, boolean 输入为 true 或 false。逻辑是,当它离开时,它是真的;正确的时候是错误的。

所以不用输入

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

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

myFunction(LEFT)
myFunction(RIGHT)

这样更容易理解我的程序

简而言之,如何在JAVA中定义一个 boolean 值的名称?

最佳答案

在我看来, boolean 值并不最适合您的情况,因为您的目标不是检查真假,而是查看所需的方向。如果您确实使用了 boolean 值,那么应该将哪个方向视为“真”?哪个假的?如果你想添加 UP 和 DOWN 怎么办?同样, boolean 值似乎不太合适。

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

enum Direction {
  LEFT, RIGHT
}

然后定义你的方法:

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

这为您提供了编译时类型检查 和 self 记录(根据评论中的@sqrfv)的优势,因此比使用字符串或 boolean 值要好得多。还要注意枚举可以有参数和方法,因此比字符串或 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;
   }
}

然后像这样在我的键绑定(bind)中使用它:

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;
   }
}

关于java - 如何定义具有 boolean 值 true 或 false 的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20012026/

相关文章:

java - 如何防止我的作者覆盖文件?

java - 你能以编程方式改变图像的颜色吗?

java - 如何通过从其他列表中读取值之一来过滤对象列表

java - 测试 4 个号码,看看其是否有 3 个唯一号码

Java简单JSON对象声明抛出异常

java - 非法状态异常 : No service found for persistable resource: disk [ehCache 3]

java - 如何从 Netbeans 中的 JFrame GUI 中删除查询?

java - 用 O(nlogn) 时间 O(1) 空间有效地计算数组中等值对的数量

java - Spring JPA更新并返回更新后的数据

java - Java 文件对象可以是 linux 机器上 "Too many files open"错误消息的原因吗