<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Fri, Mar 30, 2018 at 8:35 AM Brian Goetz <<a href="mailto:brian.goetz@oracle.com" target="_blank">brian.goetz@oracle.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div text="#000000" bgcolor="#FFFFFF">
    <tt>I think we are the heart of the disagreement.  I do not think
      that "someone added an enum constant" is necessarily a classpath
      insanity thing.  Its just as likely to be a garden-variety "you
      made one assumption over here and another over there" within the
      same codebase.  (And, </tt><tt><tt>we've told people for years
        that its OK to add enum constants.)<br></tt></tt></div></blockquote><div><br></div><div>Won't the garden-variety differences in assumptions normally be reported at compile-time? If the codebase is recompiled after the enum is updated, I would expect javac to reject an e-switch over an enum type that does not explicitly handle all enum constants and omits an explicit default case.</div><div><br></div><div>For the exception being discussed to be thrown, the enum has to change after the code switching on it has been compiled, and then the switch has to be executed without having been recompiled. That skew between the classpath the switch was compiled against and the classpath the switch runs against is the 'classpath insanity' part.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div text="#000000" bgcolor="#FFFFFF"><tt><tt>
      </tt>I think its at least as likely that this is in the same
      category as any other assumption we make about code we call.  Like
      "this method never returns null".  Or "this method says it returns
      Object, but I know it always returns String, so I'll cast to
      String."  </tt></div></blockquote><div><br></div><div> I see a distinction here in that there's no way to enforce those other assumptions at compile-time.</div></div></div>