Anu*_*er9 5 java enums parsing input
我想知道在Java中枚举的好方法.
我很想知道这一点,通常我想出的东西包括几个独立的枚举和函数,还有一些定义等等.
但基本上,我想为各种类型的枚举定义唯一的数字键,使用子枚举.
例如,我正在尝试在括号中实现一种带有各种关键字和符号的语言,并带有与该元素对应的数字.像元素(id).
关键词:程序(1),调用(2),if(3),else(4),elsif(5),...符号';'(6),','(7),'='(8 ),'+'(9),...操作:和(10),或(11),...
实现这一目标的最佳方法是什么?
我希望我的帖子很清楚.但基本上我正在尝试创建元素类型的类别,然后是元素定义,它们具有关联的数值.
这样做的目的是,我可以检查输入字符串,如果它将输入中的子字符串标识为上面"字典"中的元素,则返回整数值.
提前致谢!
您不应该关心枚举本身的数值,也不应该依赖它们。原因是,如果将来您或其他人决定将新的枚举添加到枚举列表的中间,那么您的所有数值现在都无效,您必须仔细检查代码并更改它们。因此,最好依赖于实际的枚举而不是枚举的数值。
如果您尝试将枚举“分组”在一起(如果我正确理解您的问题),您可以使用类似标记界面的东西。例如,您可以:
public interface Operators {
}
public enum BooleanOperators implements Operators {
AND, OR, NOT, XOR
}
public enum ArithmeticOperators implements Operators {
ADD, SUBTRACT, MULTIPLY, DIVIDE
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用一个接受 type 的方法,BooleanOperators而不是使用两种方法,一种接受 type 的枚举,另一种接受 type 的类型:ArithmeticOperatorsOperators
public void doSomethingWithOperators(Operators operators) {
....
}
Run Code Online (Sandbox Code Playgroud)
如果您想将显式值绑定到枚举,有一种安全的方法可以做到这一点:
public interface Operators {
int getCode();
}
public enum BooleanOperators implements Operators {
private int code;
AND(1), OR(2), NOT(3), XOR(4)
private BooleanOperators(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
Run Code Online (Sandbox Code Playgroud)
然后您可以执行ArithmeticOperators.ADD.getCode(),这将返回与该枚举关联的代码。此方法更安全,因为您可以看到与枚举显式关联的值,而不是根据其定义顺序隐式关联的值。因此,当您或其他人添加新枚举时,他们应该将一个(希望是唯一的)整数值与新枚举关联起来。
注意:在这种情况下,标记接口并不是绝对必要的;它只是强制要求所有实现该接口的枚举都应该具有该getCode()方法。以下内容同样有效:
public enum BooleanOperators {
private int code;
AND(1), OR(2), NOT(3), XOR(4)
private BooleanOperators(int code) {
this.code = code;
}
public int getCode() {
return this.code;
}
}
Run Code Online (Sandbox Code Playgroud)
我想这就是你想要的。如果没有,请告诉我!
编辑
Token根据您的评论,我将使用应用于所有枚举的标记接口(我们称之为),然后使用类型的映射Map<String, Token>。您将使用您的令牌和相应的枚举来初始化此映射。当解析器返回标记时,您可以使用映射查找枚举。
| 归档时间: |
|
| 查看次数: |
234 次 |
| 最近记录: |