gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:22:59 24 4
gpt4 key购买 nike

我的程序有很多函数, 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com