<div dir="auto"><div>Hello Brian,<div dir="auto"><br></div><div dir="auto">Thank you for your response!</div><div dir="auto"><br></div><div dir="auto">Yet again, I did not think things through. I was only thinking of switches being inside of methods.</div><div dir="auto"><br></div><div dir="auto">But switches are expressions now, so they can be anywhere that we put an expression.</div><div dir="auto"><br></div><div dir="auto">So, I could put them on an instance field or a static field. How could we handle that if the switch wasn't total?</div><div dir="auto"><br></div><div dir="auto">Yes, what you say about method boundaries not only makes sense, but is practically required because switch is an expression.</div><div dir="auto"><br></div><div dir="auto">Thank you for your time and help!</div><div dir="auto">David Alayachew</div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 4, 2024, 1:59 PM Brian Goetz <<a href="mailto:brian.goetz@oracle.com">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"><u></u>

  
  <div>
    <font size="4" face="monospace">There's another piece of the answer
      here as well, which is the existing boundaries for type-checking
      checked exceptions.  And that existing boundary is solely method
      boundaries.  (Lambdas are methods.)<br>
      <br>
      A method can be declared to throw a set of checked exceptions; the
      only place we check for "you can't throw X here" is at the top
      level of a method.  (What exceptions might be thrown from the top
      level may bubble up from more deeply nested blocks within a
      top-level statement, through flow analysis.)  <br>
      <br>
      The current proposal does not propose to change that; we are not
      making switches a boundary where we do method-style exception
      checking (we'd have to put a `throws` clause on a switch if we
      did.)  <br>
    </font><br>
    <div>On 1/1/2024 2:37 AM, David Alayachew
      wrote:<br>
    </div>
    <blockquote type="cite">
      
      <div dir="ltr">
        <div class="gmail_default" style="font-family:monospace">Hello,</div>
        <div class="gmail_default" style="font-family:monospace"><br>
        </div>
        <div class="gmail_default" style="font-family:monospace">Thank
          you for your response!</div>
        <div class="gmail_default" style="font-family:monospace"><br>
        </div>
        <div class="gmail_default" style="font-family:monospace">Yes,
          this makes a lot of sense, and I figured it would be the case.
          But the article (surprisingly) didn't address that point at
          all. Likely because just broaching the topic of exceptions in
          switch was a task on its own, and this subject will come
          later.</div>
        <div class="gmail_default" style="font-family:monospace"><br>
        </div>
        <div class="gmail_default" style="font-family:monospace">I also
          appreciate the set theory formula at the end. You also posted
          that in the other thread, and I still plan to respond to that
          once I get the chance.</div>
        <div class="gmail_default" style="font-family:monospace"><br>
        </div>
        <div class="gmail_default" style="font-family:monospace">Thank
          you for your time and help!</div>
        <div class="gmail_default" style="font-family:monospace">David
          Alayachew<br>
        </div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr" class="gmail_attr">On Mon, Jan 1, 2024 at 2:27 AM
          Holo The Sage Wolf <<a href="mailto:holo3146@gmail.com" target="_blank" rel="noreferrer">holo3146@gmail.com</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
          <div dir="auto">Checked exceptions will remain totally
            checked.
            <div dir="auto"><br>
            </div>
            <div dir="auto">Given a function f, let checkF be the set of
              checked exceptions, then the expression:</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">switch(root(args)) {</div>
            <div dir="auto">    case branch0 -> do0(args);</div>
            <div dir="auto">    case branch1 -> do1(args);</div>
            <div dir="auto">    ...</div>
            <div dir="auto">    case branch1 -> doN(args);</div>
            <div dir="auto">    case throws fBranch0 ->
              handle0(args);</div>
            <div dir="auto">    case throws fBranch0 ->
              handle1(args);</div>
            <div dir="auto">    ...</div>
            <div dir="auto">    case throws fBranch0 ->
              handleM(args);</div>
            <div dir="auto">}</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Will have the following set of checked
              exceptions:</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">   (checkRoot - {fBranch0, ... fBranchM}) +
              checkDo0 + ... + checkDoN + checkHandle0 + ... +
              checkHandleM</div>
            <div dir="auto"><br>
            </div>
            <div dir="auto">Where minus is set difference and plus is
              union</div>
          </div>
          <br>
          <div class="gmail_quote">
            <div dir="ltr" class="gmail_attr">On Mon, 1 Jan 2024, 09:12
              David Alayachew, <<a href="mailto:davidalayachew@gmail.com" target="_blank" rel="noreferrer">davidalayachew@gmail.com</a>>
              wrote:<br>
            </div>
            <blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
              <div dir="ltr">
                <div class="gmail_default" style="font-family:monospace">Hello
                  Amber Dev Team,</div>
                <div class="gmail_default" style="font-family:monospace"><br>
                </div>
                <div class="gmail_default" style="font-family:monospace">I
                  read Brian Goetz's "Case Effect on Switch" (looks like
                  it recently got renamed to "Uniform handling of
                  failure in switch"), and I have a quick question.</div>
                <div class="gmail_default" style="font-family:monospace"><br>
                </div>
                <div class="gmail_default" style="font-family:monospace">I
                  think it's cool to bring error handling into switch,
                  but will we still get the exhaustiveness/totality on
                  checked exceptions that we are used to on the try
                  catch side?</div>
                <div class="gmail_default" style="font-family:monospace"><br>
                </div>
                <div class="gmail_default" style="font-family:monospace">I
                  feel like it would be weird and unintuitive if it
                  didn't, since switch expressions already give us
                  exhaustiveness/totality, and that's basically the
                  biggest reason to use a switch expression in the first
                  place. Leaving it out for exceptions would just feel
                  mean. Plus, having this feature would really help with
                  clarifying intent and with readability.</div>
                <div class="gmail_default" style="font-family:monospace"><br>
                </div>
                <div class="gmail_default" style="font-family:monospace">Thank
                  you for your time and help!</div>
                <div class="gmail_default" style="font-family:monospace">David
                  Alayachew<br>
                </div>
              </div>
            </blockquote>
          </div>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </div>

</blockquote></div></div></div>