解析枚举Java的最佳方法
我想知道一个用Java枚举的好方法
我很长时间都在想这个问题,通常我会想出一些包含几个独立的枚举和函数,以及一些定义之类的东西
但基本上,我想为各种类型的枚举定义唯一的数字键,包括子枚举
例如,我试图实现一种包含各种关键字和符号的语言,括号中的数字对应于该元素。Like元素(id)
关键词:程序(1)、调用(2)、if(3)、else(4)、elsif(5)。。。 符号“;”(6), ','(7), '='(8), '+'(9), ... 操作:和(10),或(11)
实现这一目标的最佳方式是什么
我希望我的帖子是清楚的。但基本上,我试图创建元素类型的类别,然后是其中的元素定义,它们有一个关联的数值
这样做的目的是,如果输入字符串将输入中的子字符串标识为上面“dictionary”中的元素,那么我可以检查输入字符串以返回整数值
提前谢谢
# 1 楼答案
使用^{} 创建
enum
的子集;例如here# 2 楼答案
很好的解决方案,但当您实现运算符时,会关心它们的优先级,这也可以是枚举参数。我的方法是对每个优先级级别使用单独的组,当我将它们添加到解析器中时,我会按优先级顺序添加它们
# 3 楼答案
看看enum:
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
# 4 楼答案
您不应该关心枚举本身的数值,也不应该依赖它们。原因是,如果将来您或其他人决定在枚举列表的中间添加一个新的枚举,那么您的所有数值现在都无效,您必须检查代码并更改它们。因此,最好依赖于实际枚举,而不是枚举的数值
如果您试图将枚举“分组”在一起(如果我正确理解您的问题),您可以使用类似于标记接口的东西。例如,你可以:
然后,您可以使用一个接受类型
Operators
的方法,而不是两个方法,一个接受类型BooleanOperators
的枚举,另一个接受类型ArithmeticOperators
的枚举:如果要将显式值绑定到枚举,有一种安全的方法:
然后您可以执行
ArithmeticOperators.ADD.getCode()
,这将返回与该枚举关联的代码。此方法更安全,因为您可以看到值显式地与枚举关联,而不是根据它们的定义顺序隐式关联。因此,当您或其他人添加新枚举时,他们需要将一个(希望是唯一的)整数值与新枚举相关联注意:在这种情况下,标记接口不是绝对必要的;它只是强制要求所有实现接口的枚举都应该有
getCode()
方法。以下内容同样有效:我想这就是你想要的。如果没有,请告诉我
编辑
根据您的评论,我将使用应用于所有枚举的标记接口(我们称之为
Token
),然后使用类型为Map<String, Token>
的映射。您将使用令牌和相应的枚举初始化此映射。当解析器返回令牌时,可以使用映射查找枚举