Bug in switch around Enums?
Brian Slesinsky
brian at slesinsky.org
Sat Sep 29 11:42:01 PDT 2007
Sure, support for constant expressions that return an enum seems like a win.
It would also solve a different gotcha. This doesn't work:
void doSwitch(MyEnum x) {
switch (x) {
case MyEnum.FOO:
// do something
}
}
This was the first thing I tried (by experiment, rather than reading
the spec) and for a short time I was under the impression that enums
don't work with switch statements. The same thing happened to one
other person I know. Even if the spec isn't changed, clear error
messages help. (Although I believe it was IntelliJ that confused me,
not javac.)
- Brian
On 9/29/07, Tom Ball <Tom.Ball at sun.com> wrote:
> Okay, it's not a bug since the spec says its not. It is still an
> unnecessary syntactic inconsistency between constants and enums,
> however, and inconsistencies like this making the language a little
> harder to learn (yet another rule to remember). This can't be changed
> in the compiler until the spec is, but perhaps there is a related
> pending JSR which can add it as an update.
>
> Tom
>
> Matthias Ernst wrote:
> > Ted,
> >
> > according to the JLS it's not a bug.
> >
> > Switch labels can either be constant expressions or enum identifiers:
> >
> > http://java.sun.com/docs/books/jls/third_edition/html/statements.html#14.11
> > SwitchLabel:
> > case ConstantExpression :
> > case EnumConstantName :
> > default :
> >
> > and constant expression is only defined for primitives and String:
> > http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.28
> >
> > So (STAGGER) is neither a constant expression nor an enum constant name.
> >
> > Feel free to call me type 1
> > (http://diveintomark.org/archives/2004/08/16/specs) :-)
> >
> > Matthias
>
>
More information about the compiler-dev
mailing list