<div dir="auto"><div dir="auto">I outlined simple, practical approach to this when lambdas were first added to Java [1]. Much of the blog post above is no longer especially interesting, but the basic "lone throws" concept still is. The key part is repeated in these three bullet points:</div><div dir="auto"><br></div><div dir="auto"><div dir="auto">* Any method may have a throws keyword without specifying the types that are thrown ("lone-throws"). This indicates that any exception, checked or unchecked may be thrown. Once thrown in this manner, any checked exception flows up the stack in an unchecked manner.</div><div dir="auto">* Any catch clause may have a throws keyword after the catch. This indicates that any exception may be caught, even if the exception isn't known to be thrown by the try block.</div><div dir="auto">* All closures are implicitly declared with lone throws. Thus, all closures can throw checked and unchecked exceptions without declaring the checked ones.</div></div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">I suspect it is too late for the last bullet point to be adopted, but the first two would IMO still be hugely beneficial to Java. The point here is not to reject the idea of checked exceptions, but to provide a convenient way to convert/handle them when they are not what you want.</div><div dir="auto"><br></div><div dir="auto">Various alternative mechanisms are in use today:</div><div dir="auto">* additional functional interfaces such as ThrowableFunction</div><div dir="auto">* utilities like Unchecked.wrap(ThrowableSupplier) which convert checked to unchecked</div><div dir="auto">* hacks like "sneaky throw"</div><div dir="auto">My argument is that there is a very clear use case in the global corpus of Java code for a mechanism to convert/handle checked exceptions more like unchecked. And that this would be a good language feature, given that it can be done without threatening those who appreciate checked exceptions.</div><div dir="auto"><br></div><div dir="auto">Stephen</div><div dir="auto"><br></div><div dir="auto"><br></div><div>[1] <a href="https://blog.joda.org/2010/06/exception-transparency-and-lone-throws_9915.html?m=1">https://blog.joda.org/2010/06/exception-transparency-and-lone-throws_9915.html?m=1</a><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 14 Nov 2022, 23:09 Archie Cobbs, <<a href="mailto:archie.cobbs@gmail.com">archie.cobbs@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div dir="ltr">On Mon, Nov 14, 2022 at 4:52 PM <<a href="mailto:forax@univ-mlv.fr" target="_blank" rel="noreferrer">forax@univ-mlv.fr</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)">I'm proposing to demote checked exceptions to make them second class citizen because this practically what they are.<br><div><div>The problem is that the status quo is pushing people to use runtime exceptions instead of exceptions because checked exception do not compose well, exactly what we both do not want.<br></div></div></div></div></blockquote><div><br></div><div>I totally agree that the lack of composibility (composibleness?) is a problem. But I don't agree that ALL of the blame for that problem rests on checked exceptions. After all, checked exceptions have been around a lot longer than lambdas.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:arial,helvetica,sans-serif;font-size:12pt;color:rgb(0,0,0)"><div><div>What if checked exceptions work like unchecked casts ?</div></div></div></div></blockquote><div><br></div>This sounds like a much more promising direction to go in.</div><div class="gmail_quote"><br></div><div class="gmail_quote">All we want is a simple way to tell the compiler "I know this lambda can throw a checked exception, just pass it through instead of making this impossible to compile".</div><div class="gmail_quote"><br></div><div class="gmail_quote">E.g. something like this??<br></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace"><br></span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">public <T> void execute(<span style="background-color:rgb(255,255,0)">@PassThroughCheckedExceptions</span> Supplier<T> getter) {<br></span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">    return <span style="font-family:monospace">getter</span>.get();<br></span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">}</span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace"><br></span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">public InputStream openFile(File file) throws IOException {</span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">    this.execute(FileInputStream::new);<br></span></div><div class="gmail_quote" style="margin-left:40px"><span style="font-family:monospace">}<br></span></div><div><br></div><div>-Archie<br></div><div class="gmail_quote"><div> </div></div>-- <br><div dir="ltr">Archie L. Cobbs<br></div></div>
</blockquote></div></div></div>