Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JDK 15 Sealed Classes - how to use across packages?

I have a simple sealed class, MyShape:

public sealed class MyShape permits MyCircle {

    private final int width;
    private final int height;

    public MyShape(int width, int height) {
        this.width = width;
        this.height = height;
    }

    public int width() {
        return width;
    }

    public int height() {
        return height;
    }
}

And one simple subclass, MyCircle:

public final class MyCircle extends MyShape {

    public MyCircle(int width) {
        super(width, width);
    }
}

Everything compiles and works when both classes are in the same package. If I move MyCircle into a sub-package, then the build breaks with: java: class is not allowed to extend sealed class: org.example.MyShape.

My understanding from the JDK 15 docs is that this should work. Am I missing a step?

I've created a GitHub repo if you want to experiment.

like image 407
Luke Avatar asked Sep 17 '20 21:09

Luke


1 Answers

As stated in the documentation that you have linked:

JDK 15 Documentation

They must be in the same module as the sealed class (if the sealed class is in a named module) or in the same package (if the sealed class is in the unnamed module).

like image 176
RStevoUK Avatar answered Oct 13 '22 00:10

RStevoUK