我的程序有很多函数,布尔输入为true或false。而逻辑是它何时离开,它是真的;如果它是对的,那就是假的。
所以不要输入
myFuncton(true) //input is left
myFunction(false) //input is right
我希望能够像这样调用myFunction:
myFunction(LEFT)
myFunction(RIGHT)
所以理解我的程序要容易得多
简而言之,如何在JAVA中使用布尔值定义名称?
答案 0 :(得分:11)
在我看来,布尔值最适合您的情况,因为您的目标不是检查是真是假,而是查看所需的方向。如果你确实使用了布尔值,那么哪个方向应该被认为是“真”?哪个假?如果你想要添加UP和DOWN怎么办?同样,布尔值似乎不太适合。
看起来你最好的选择是使用枚举:
enum Direction {
LEFT, RIGHT
}
然后定义你的方法:
public void myFunction(Direction dir) {
if (dir == Direction.LEFT) {
// go left
} else {
// go right
}
}
这为您提供了编译时类型检查和自我文档(根据注释中的@sqrfv)的优势,因此比使用String或布尔值要好得多。另请注意,枚举可以包含参数和方法,因此比String或布尔类型更强大。
例如,我想使用枚举将键击与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;
}
}
答案 1 :(得分:10)
使用final变量,final确保您无法更改变量的值。
final boolean LEFT = true;
final boolean RIGHT = false;
然后你可以像这样使用它们
myFunction(LEFT)
myFunction(RIGHT)
答案 2 :(得分:2)
查看定义常量。根据您的使用情况,您需要公开/受保护/私密。
static final boolean LEFT = true;
static final boolean RIGHT = false;
编辑:做错了。
答案 3 :(得分:0)
Final int LEFT = 0
Final int RIGHT = 1
这就是我按键的方式,除了包含前进和后退。