在Java中,Enum
语句中的switch
常量不要求(甚至允许)常量为类型限定。
示例:
switch (obj.getEnumValue()) {
case VALUE1:
...
case VALUE2:
...
}
这当然是可行的,因为Enum
类型在编译时是已知的。
但是,在注释中使用时,Enum
值不会提供同样的便利,即使在编译时已知Enum
类型:
示例:
@Retention(RUNTIME) // compile error here!
public @interface MyAnnotation {
...
}
我的问题是为什么JLS对这两种情况的处理方式不同?我试图从语言设计的角度理解推理。
似乎在两种情况下都适用相同的逻辑:Enum
类型是已知的,因此语言应该允许(或甚至要求)Enum
常量不合格,为了简洁和程序员方便。
PS。这不是关于如何解决问题的问题。这是一个JLS设计问题。