Try/Catch DU Exception

Anatoly Kupriyanov kan.izh at gmail.com
Sat Jul 13 15:06:53 UTC 2024


Would not that be addressed with the suggested switch-case-throws? See
https://inside.java/2023/12/15/switch-case-effect/

final String description = switch(thread.getName()) {
    case String name -> '"' + name + '"';
    case throws NullPointerException _ -> "null";
}

On Fri, 12 Jul 2024 at 21:24, Archie Cobbs <archie.cobbs at gmail.com> wrote:

> I'd like to propose a very minor language improvement and would appreciate
> any feedback.
>
> This is a true corner case, but I bet most developers have tripped over it
> a few times. It's easy to work around... but still...
>
> Here's a simple example:
>
>     void describeMyThread(Thread thread) {
>         final String description;
>         try {
>             description = '"' + thread.getName() + "'";
>         } catch (NullPointerException e) {
>             description = "null";
>         }
>         System.out.println("the thread is " + description);
>     }
>
> This doesn't compile:
>
>     DUTest.java:8: error: variable description might already have been
> assigned
>                 description = "(null)";
>                 ^
>
> The error is a false positive: there is no way an exception can be thrown
> in the try block *after* description is assigned, because description
> being assigned is literally the last thing that occurs in the try block.
>
> Developers intuitively know that description will be DU at the start of
> the catch block, so the error feels surprising and makes the compiler seem
> less smart than it should be.
>
> My proposal is to fix this by adding a "try/catch DU exception" to
> §16.2.15:
>
> V is definitely unassigned before a catch block iff all of the following
> are true:
>     V is definitely unassigned after the try block *or the try block ends
> with an assignment expression statement V=b and V is definitely unassigned
> after b*
>     V is definitely unassigned before every return statement ...
>
> A prototype compiler implementation is here
> <https://github.com/openjdk/jdk/compare/master...archiecobbs:jdk:TryCatchDUException>
> .
>
> Thoughts?
>
> -Archie
>
> --
> Archie L. Cobbs
>


-- 
WBR, Anatoly.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/amber-dev/attachments/20240713/53242705/attachment.htm>


More information about the amber-dev mailing list