I agree that we should only seal existing classes that could not have been extended by application classes. The ones I listed in my previous email fit that bill, since an attempt to subclass them will throw an exception when it is used in a scene graph. Each documents that subclassing is disallowed.

Btw, we've already started making use of pattern-matching instanceof in the implementation anyway. It would be the first API change that relies on a JDK 17 feature, but for JavaFX 21, I see no problem in doing that.

-- Kevin


On 2/1/2023 9:06 AM, Philip Race wrote:
In the JDK we've only sealed  existing classes which provably could not have been extended by application classes,
so I'm not sure about this ..

also I think that might be the first change that absolutely means FX 21 can only be built with JDK 17 and later ..

-phil

On 2/1/23 8:59 AM, Thiago Milczarek Sayão wrote:
Yes, sorry, I made the email title in plural, but I meant what Michael said, Node would be sealed permitting only what is needed for JavaFx internally.


-- Thiago


Em qua., 1 de fev. de 2023 às 13:48, Michael Strauß <michaelstr...@gmail.com> escreveu:

    I don't think that's what Thiago is proposing. Only `Node` would
    be sealed.
    The following subclasses would be non-sealed: Parent, SubScene,
    Camera, LightBase, Shape, Shape3D, Canvas, ImageView.
    And then there are additional subclasses, which don't fit into this
    idea since they are in other modules: SwingNode (in javafx.swing),
    MediaView (in javafx.media), Printable (in javafx.web).



    On Wed, Feb 1, 2023 at 5:39 PM John Hendrikx
    <john.hendr...@gmail.com> wrote:
    >
    > I think this may be a bit unclear from this post, but you're
    proposing I think to make `Node`, `Shape` and `Shape3D` sealed. 
    For those unaware, you're not allowed to extend these classes
    (despite being public).  For example Node says in its documentation:
    >
    >    * An application should not extend the Node class directly.
    Doing so may lead to
    >    * an UnsupportedOperationException being thrown.
    >
    > Currently this is enforced at runtime in NodeHelper.
    >
    > --John
    >
    > On 01/02/2023 15:47, Thiago Milczarek Sayão wrote:
    >
    > Hi,
    >
    > NodeHelper.java has this:
    >
    > throw new UnsupportedOperationException(
    >         "Applications should not extend the "
    >         + nodeType + " class directly.");
    >
    >
    > I think it's replaceable with selead classes. Am I right?
    >
    > The benefit will be compile time error instead of runtime.
    >
    >
    > -- Thiago.
    >


Reply via email to