Although the depth of this debate may seem to have exceeded its value in resolving the question at hand, I think it's usually worthwhile to try hammer out these kinds of differences, until we all have a greater common understanding (or clearly arrive at an impasse...).

Nah, I'm not grumpy yet :)

Now, either this came to my attention through a compile-time or runtime error. If the former, it is clear what is going on, and is part of my normal workflow for how I get my code to work. If the latter, I'm suggesting that the best thing we can do is to prompt the developer to wonder "wait, why didn't I get a compile error?" so that it reduces to the former.

Backing way up, Alex had suggested that the right exception is (a subtype of) IncompatibleClassChangeEXCEPTION, rather than Error.  I was concerned that ICC* would seem too low-level to users, though. But you're saying ICCE and subtypes are helpful to suers, because they guide users to "blame your classpath".  SO in that case, is the ICC part a good enough trigger?



    (The latter is a new idea, but I think is what you're getting at
    -- perhaps the rule should be that _within a module_, which is
    expected to be co-compiled, its OK to leave off the default, but
    for "foreign" enums/sealed types, we're not going to put any faith
    in the claim of sealed-ness, and make you handle the default
    explicitly?


I'm not sure I understand this, and therefore I suspect it's not what I'm getting at. :-)

Expanding:

For an enum in the same class/package/module as the switch, the chance of getting the error at runtime is either zero (same class) or effectively zero (same package or module), because all sane developers build packages and modules in an atomic operation.

For an enum in a different module as the switch, the chance of getting the error at runtime is nonzero, because we're linking against a JAR at runtime.

So an alternative here is to tweak the language so that the "conclude exhaustiveness if all enum constants are present" behavior should be reserved for the cases where the switch and the enum are in the same module?

(Just a thought.)

Reply via email to