意外的令牌 - Java 枚举
Unexpected Token - Java Enum
java 中是否有任何选项可以像下面这样使用 true 和 false 创建枚举,
public enum options {
true,
false,
both
}
我正在使用 true 和 false,现在出现意外的令牌错误。谢谢
问候
春
没有。从JLS 8.9.1开始,一个枚举常量在语法中被定义为
EnumConstant:
{EnumConstantModifier} Identifier [( [ArgumentList] )] [ClassBody]
所以它是 Identifier
。而从JLS 3.8,而Identifier
定义为
Identifier:
IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
因此,标识符是任何有效的标识符字符串(基本上是字母和数字,但加入了 Unicode 支持),不是关键字(例如if
) 或单词 true
、false
或 null
.
实际上,您的 enum
名字无论如何都应该大写,这样看起来更像
public enum Options {
TRUE, FALSE, BOTH
}
这不会造成任何问题,因为 TRUE
和 FALSE
不是 Java 中的布尔文字。
枚举的值应该像常量一样格式化; all-caps 单词之间有下划线(如果它们不止一个单词,在你的例子中,它们不是)。如果你需要能够转换它们 to/from 与枚举常量的名称和大小写不匹配的字符串,我建议添加一个参数,其中包含要在每个方向转换的字符串和方法:
public enum Options {
TRUE("true"),
FALSE("false"),
BOTH("both");
private final String description;
private Options(final String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public static Options parse(String description) {
for (Options option : Options.values()) {
if (option.getDescription().equals(description)) {
return option;
}
}
throw new IllegalArgumentException("no such option: " + description);
}
}
如果您调用 Options.parse("true")
,它将 return Options.TRUE
,如果您调用 Options.TRUE.getDescription()
,它将 return "true"
。如果你调用 Options.parse("none")
它会抛出一个 IllegalArgumentException
.
java 中是否有任何选项可以像下面这样使用 true 和 false 创建枚举,
public enum options {
true,
false,
both
}
我正在使用 true 和 false,现在出现意外的令牌错误。谢谢
问候 春
没有。从JLS 8.9.1开始,一个枚举常量在语法中被定义为
EnumConstant: {EnumConstantModifier} Identifier [( [ArgumentList] )] [ClassBody]
所以它是 Identifier
。而从JLS 3.8,而Identifier
定义为
Identifier: IdentifierChars but not a Keyword or BooleanLiteral or NullLiteral
因此,标识符是任何有效的标识符字符串(基本上是字母和数字,但加入了 Unicode 支持),不是关键字(例如if
) 或单词 true
、false
或 null
.
实际上,您的 enum
名字无论如何都应该大写,这样看起来更像
public enum Options {
TRUE, FALSE, BOTH
}
这不会造成任何问题,因为 TRUE
和 FALSE
不是 Java 中的布尔文字。
枚举的值应该像常量一样格式化; all-caps 单词之间有下划线(如果它们不止一个单词,在你的例子中,它们不是)。如果你需要能够转换它们 to/from 与枚举常量的名称和大小写不匹配的字符串,我建议添加一个参数,其中包含要在每个方向转换的字符串和方法:
public enum Options {
TRUE("true"),
FALSE("false"),
BOTH("both");
private final String description;
private Options(final String description) {
this.description = description;
}
public String getDescription() {
return description;
}
public static Options parse(String description) {
for (Options option : Options.values()) {
if (option.getDescription().equals(description)) {
return option;
}
}
throw new IllegalArgumentException("no such option: " + description);
}
}
如果您调用 Options.parse("true")
,它将 return Options.TRUE
,如果您调用 Options.TRUE.getDescription()
,它将 return "true"
。如果你调用 Options.parse("none")
它会抛出一个 IllegalArgumentException
.