It's not rare to add components to a sum type, by example a MouseEvent is upgraded to add the number of mouse wheel scroll knobs.

(later corrected to "product")

To do that, you can't just blindly add a new component, because existing ctor calls will no longer link.  If yesterday you had

    record Foo(int x, int y) { }

then if you want to add a z, you have to:

    record Foo(int x, int y, int z) {
        Foo(int x, int y) { this(x,y, 0); }
    }

and now old ctor sites will link.

It's exactly the same with dtors; if you add a component, you have to explicitly provide the dtor with the old descriptor.

in my opinion, a cascade of if ... instanceof and a switch on types should have the same constraints

It's a good intuition, but can you be specific about what constraints you are talking about?



Reply via email to