Ah, got it! That teach me to reply before 7am and before the coffee hits!
This might be a reasonable approach in that case. Certainly it does away
with the need for the enum and the exception.

-- Jonathan
(Tapped on a touch device)

On Mon, 18 Jan 2021, 6:59 am Nir Lisker, <nlis...@gmail.com> wrote:

> I think Frederic meant that the Optional is empty in the case where you
> can't reliably get the state of the key, otherwise the true and false
> values are for the on and off states. The Optional itself is never null.
>
> On Sun, Jan 17, 2021 at 7:31 PM Jonathan Giles <jonat...@jonathangiles.net>
> wrote:
>
>> A method returning Optional should never return null, as that undoes the
>> contract that Optional is supposed to represent, which is to avoid NPEs by
>> never being null itself, only empty in the absence of a returned value.
>> For
>> this reason, an Optional should be considered two state rather than three
>> state.
>>
>> -- Jonathan
>> (Tapped on a touch device)
>>
>> On Mon, 18 Jan 2021, 12:29 am Frederic Thevenet, <thevenet.f...@free.fr>
>> wrote:
>>
>> > Hi,
>> >
>> >  From the perspective of the application developer, I think throwing a
>> > runtime exception if the key does not exists on a given platform is
>> > potentially risky, as the API provided no hints that a given key might
>> > not exists an other platforms, and this oversight will only manifest
>> > itself at runtime, on said platform.
>> >
>> > With the other two proposed solution (three-state return and Checked
>> > exception) the API itself reminds its would be consumer that they should
>> > consider a case where the operation is invalid.
>> >
>> > I'm personally not keen on checked exceptions in such a scenario either,
>> > as it would require an extra API to check for the existence of a given
>> > key on the current platform, or condemn developers to implement
>> > conditional logic via exception catching (or require developer to know
>> > what specific keys exists on what platform before-hand to do the check).
>> >
>> > Given all that, my personal preference would go to a three state return
>> > solution.
>> >
>> > On that topic, is there anything that would preclude the use of an
>> > Optional<Boolean> to represent these three states, if we want to avoid
>> > introducing new enums?  It seems to me its semantics aligns quite nicely
>> > with the problem at hand.
>> >
>> > Fred
>> >
>> >
>> > On 16/01/2021 17:41, Kevin Rushforth wrote:
>> > > Hi Jonathan,
>> > >
>> > > Thanks for the suggestion. I thought about it as well. We could do
>> > > that, but it seems like overkill. I'll reconsider if enough others
>> > > favor the idea. As for the exception, my thinking is to use
>> > > UnsupportedOperationException, which is what the equivalent AWT method
>> > > uses. FWIW, I don't generally like checked exceptions; we don't define
>> > > any such exceptions in JavaFX and I wouldn't want to start now.
>> > >
>> > > -- Kevin
>> > >
>> > >
>> > > On 1/16/2021 12:46 AM, Jonathan Giles wrote:
>> > >> Hi friends,
>> > >>
>> > >> Just to throw out an alternate API approach (which I would not go
>> > >> anywhere near close to saying is a better approach), we could
>> > >> consider a three-value enum getter API:
>> > >>
>> > >> public static KeyLockState Platform::getKeyLockState(KeyCode
>> keyCode);
>> > >>
>> > >> Where KeyLockState = { LOCKED, NOT_LOCKED, NOT_PRESENT }
>> > >>
>> > >> I'll be the first to argue against yet another enum, but I wanted to
>> > >> throw this out there as an alternate approach that avoids the needs
>> > >> for checked exceptions (which is what I assume is meant by 'throw an
>> > >> exception', as opposed to throwing a runtime exception).
>> > >>
>> > >> -- Jonathan
>> > >>
>> > >> On Sat, Jan 16, 2021 at 6:40 AM Kevin Rushforth
>> > >> <kevin.rushfo...@oracle.com <mailto:kevin.rushfo...@oracle.com>>
>> wrote:
>> > >>
>> > >>     For JavaFX 17, I am planning to add a minor enhancement to read
>> the
>> > >>     state of the keyboard lock keys, specifically, Caps-Lock,
>> > >>     Num-Lock, and
>> > >>     maybe Scroll-Lock (although I might defer the latter to a future
>> > >>     version
>> > >>     since it will be more difficult to test, and doesn't seem as
>> > >> useful).
>> > >>
>> > >>     This is currently tracked by JDK-8259680 [1].
>> > >>
>> > >>     The proposed API would be something like:
>> > >>
>> > >>              public static boolean Platform::isKeyLocked(KeyCode
>> > >> keyCode);
>> > >>
>> > >>     One question is whether we should throw an exception if the key
>> > >> state
>> > >>     cannot be read on a particular system (e.g., Num Lock on macOS),
>> > >>     which
>> > >>     is what the similar AWT API does. I don't have a strong opinion
>> on
>> > >>     that
>> > >>     poont, although I wouldn't want to throw an exception if the
>> > >> keyboard
>> > >>     doesn't have the key in question, as long the system is able to
>> > >>     read the
>> > >>     state accurately.
>> > >>
>> > >>     Comments are welcome.
>> > >>
>> > >>     -- Kevin
>> > >>
>> > >>     [1] https://bugs.openjdk.java.net/browse/JDK-8259680
>> > >>     <https://bugs.openjdk.java.net/browse/JDK-8259680>
>> > >>
>> > >
>> >
>>
>

Reply via email to