Perhaps these type of exceptions can be called "managed" exceptions. Two
syllables instead of the monosyllabic "checked" might draw interest to the
possibility that a slightly more complicated mechanism can make things
easier for the developer. I don't know.

On Sun, 31 Oct 2021 at 23:07, Owen Thomas <owen.paul.tho...@gmail.com>
wrote:

> On Sun, 31 Oct 2021 at 18:24, Emilian Bold <emilian.b...@gmail.com> wrote:
>
>> I don't understand your proposal. You are trying to explain it in an
>> almost formal way but I don't know what it means...
>>
>
> Thank you for trying Emilian. Sometimes I find it hard to speak directly.
> Hopefully you'll find some sense in what I'm trying to talk about in this
> reply. :)
>
> Please also note that I speak from a position of ignorance about Java
> modules. I hope you can fill in the blanks with your own understanding of
> Java modules which I assume is better than mine.
>
>
>> For eg. not sure what "ignored" means. Does it behave like a Runtime
>> Exception? Or is it just not thrown?
>>
>
> I think it fair that javac should not compile your code if you attempt to
> catch or if you declare that any method throws an exception that is
> "ignored". Perhaps you may think that is too harsh, but I'm less than eager
> to accept anything more accommodating at this point in time until I hear a
> compelling reason for why this might be better.
>
>
>> Same with the other 2 options.
>>
>
> Okay. <cracks knuckles>
>
> Imagine this scenario. Hopefully, this use case describes what happens
> when an exception that extends this CheckedException class is "ignored". If
> you get the use-case I am describing here, you can probably imagine what
> might happen in other scenarios.
>
> So, you are developing a library that depends on another library. This
> other library declares in a module descriptor that a particular exception
> is "thrown". It has to do this because this exception extends
> CheckedException, and at least one method in this module declares that it
> throws this exception.
>
> You're in charge of the module descriptors in your library. In your
> library, you have a module governed by a descriptor which says that the
> exception thrown from the module defined above is "ignored". You have to
> care about this because at least one of the methods defined in your module
> calls at least one of the methods defined in the module above. When you
> call any method declared within the above defined module from your module,
> your calling method cannot either catch this ignored exception in your
> code, nor declare that it throws this exception.
>
> Importantly, I think that the checked behaviour of such an exception has
> been preserved. Modules defined by others that call one or more methods
> defined in yours would likewise have to do something with this ignored
> exception just as you have done. A developer using your library would have
> to declare in their module descriptor what they are going to do with the
> exception that you have ignored if they are going to call any methods of
> your module: either to declare that they are "ignored" or "caught"...
> another use case.
>
> So, you have "ignored" the fact that a method you call throws a particular
> extension of the class CheckedException. Your methods cannot catch, or
> declare that they throw this exception because you said in your module's
> descriptor that you wanted this concern abstracted away for you. You have,
> however, passed this concern onto anyone who might use your module. Others
> are free to do with their module as you have done with yours, but they
> still have to do something to address the fact that this checked exception
> you have elected to ignore has been passed through your module to theirs.
>
>   Owen.
>
> PS:
> *A small, and I think favourable twist in the behaviour of checked
> exceptions expressed through this mechanism is that one might be able to,
> say, have Object.equals() throw these type of checked exceptions. This
> would perhaps slightly and temporarily modify the signature for
> Object.equals() which has been overridden in some module where a particular
> checked exception was "thrown" until the exception was handled somewhere in
> another dependent module where the exception was "caught". I can't at this
> moment see why this would be a problem; I see it as something I would like.*
>
> PPS: Perhaps, if another developer's library implements a mechanism called
> directly from Thread.run(), any "ignored" exception will just behave like
> an unchecked exception. Perhaps however, it would be more in-keeping with
> the original intentions of the checked exception mechanism that a compiler
> error would be issued, and hence I like this latter scenario better.
>
>
>
>>
>> I think you could do a byte code processor and tweak checked exceptions
>> but of course you would change signatures.
>>
>> --emi
>>
>> vin., 29 oct. 2021, 03:48 Owen Thomas <owen.paul.tho...@gmail.com> a
>> scris:
>>
>>> G'day.
>>>
>>> Upon seeing some recent emails from this group expressing a somewhat
>>> philosophical tone about how the evolving landscape of paradigms in
>>> software development may be putting a strain on Java, I just wish to put
>>> some comments that others might find interesting down about how a specific
>>> Java feature, namely checked exceptions, can be improved so that again,
>>> Java perhaps can show how to do something well enough that other languages
>>> might try and copy it.
>>>
>>> I say the following. Have an abstract checked exception class in the
>>> Java SE API. Call it, say, CheckedException. Descendents of this class
>>> behave like any other checked exception, with perhaps a few caveats
>>> explained in this email.
>>>
>>> The build script of a deployable artifact (an application or library,
>>> but in this case, probably a library explains the situation more clearly)
>>> somehow indicates that this deployable artifact (hereon referred to as a
>>> library) can declare that descendents of CheckedExceptions (never the
>>> CheckedException class itself) are:
>>>
>>>    1. thrown: A more specific descendent of a checked exception under
>>>    this clause occurs in the throws clause of a method that is exposed to
>>>    libraries that are dependent on this one.
>>>
>>>    2. caught: A more specific descendent of a checked exception under
>>>    this clause occurs in the catch block of a method that calls a method 
>>> from
>>>    a library on which this one depends.
>>>
>>>    3. ignored: Neither of the above scenarios occurs. *However, methods
>>>    in this library that call methods that throw a descendent of a checked
>>>    exception under this clause do not themselves explicitly declare that 
>>> they
>>>    throw or catch and deal with the given checked exception*.
>>>
>>> If a library declares that it throws or ignores a descendent of a
>>> CheckedException, in its build script or other deployment descriptor, then
>>> any dependent library must either declare that that CheckedException is
>>> thrown, caught, or ignored.
>>>
>>> The emphasis above is used to underscore the utility that my suggestion
>>> is trying to convey. I think that with perhaps a few tweaks, this is a
>>> flexible suggestion. Although I do not (not yet perhaps... I just need a
>>> compelling reason to) know much about Java modules, this system of
>>> selectively dealing with checked exceptions appears as a very good
>>> candidate for expression there.
>>>
>>> These are just suggestions and I put them out there because someone with
>>> some clout in shaping the future of the Java SE API might think these
>>> suggestions are worth considering further. Happy to share and perhaps to
>>> talk about it here if others share a similar interest.
>>>
>>> Have a great day. :)
>>>
>>>   Owen.
>>>
>>

Reply via email to