创建Tabs名称枚举列表时遇"Identifier expected"错误,求排查原因
Hey there! Let's break down the most common reasons you're hitting that "Identifier expected" error when creating enums (including tab name enums) — I've seen these pop up all the time, so let's go through them one by one:
非法的枚举成员名称
枚举的成员名必须符合编程语言的标识符规则:不能有空格、特殊字符,也不能以数字开头。比如你要是写了这样的代码:enum TabNames { Home Page, // 空格违反标识符规则 1Settings, // 数字开头不允许 User@Profile // 特殊字符@触发错误 }解决起来很简单:用驼峰命名、下划线替代空格,或者调整名称规避非法字符,比如改成
HomePage、Settings1、UserProfile。语法格式错误(漏加分号)
不少语言(比如Java)要求枚举成员列表末尾必须加分号,尤其是当你要在枚举里定义方法或字段的时候。比如:enum TabNames { HOME, PROFILE // 这里漏了分号,后面加方法就会直接报错 public String getDisplayName() { return this.name(); } }哪怕没有额外的方法,有些编译器也会因为格式不严谨触发错误,所以养成在成员列表末尾加分号的习惯更稳妥。
错误的枚举成员赋值方式
如果你的枚举需要给成员关联额外值(比如tab的显示文本),语法写错也会触发这个错误。比如在Java里错误的赋值写法:enum TabNames { HOME = "首页", // Java不支持这种直接赋值,需要用构造函数实现 PROFILE("个人中心") // 这才是正确的写法,前提是先定义对应的构造函数 }正确的完整写法应该是:
enum TabNames { HOME("首页"), PROFILE("个人中心"); // 注意末尾的分号 private final String displayName; // 定义构造函数 TabNames(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } }使用了编程语言关键字作为成员名
如果你把语言的关键字(比如class、return、default)当作枚举成员名,编译器肯定会报错。比如:enum TabNames { Default, // Java里default是关键字,直接触发错误 Class // class也是关键字,同样不行 }解决方法:要么换个相近的名称,要么在支持的语言里用转义符(比如C#里可以写
@Default)。
如果这些情况都不符合你的代码,不妨把你写的枚举代码贴出来,这样能更精准地定位问题!
内容的提问来源于stack exchange,提问作者Yaakov Tevel

