为什么Java要求注释值在注释中限定但在switch语句中不需要?

时间:2017-10-16 17:31:07

标签: javac jls

在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设计问题。

0 个答案:

没有答案