不同包中的类的密封类



如果我声明以下密封层次结构

package a;
import b.B;
public sealed interface A permits B {
}
package b;
import a.A;
public record B() implements A {
}

不使用模块(无模块信息.java(并尝试用Maven编译它我得到

[ERROR] .../src/main/java/a/A.java:[5,35] class a.A in unnamed module cannot extend a sealed class in a different package

我知道https://openjdk.java.net/jeps/409以及本节:

许可证指定的类必须位于超类附近:在同一模块中(如果超类在命名模块中(或在同一个包中(如果超类在未命名的模块中(。

但是,Maven在编译时不应该默认使用类路径吗?这种限制能完全避免吗?

如果不是,这不是开创了一个先例吗?模块路径上的功能比类路径上的更灵活,反过来,虽然类路径仍然受支持,但与模块路径相比,它不像过去那样是一流的公民?

类路径未命名的模块。

其动机是密封类及其(直接(子类是紧密耦合的,因为它们必须一起编译和维护。在模块化的世界中,这意味着";"相同模块";;在非模块化世界中,这方面的最佳近似值是"0";相同的包装";。

所以,是的,如果你使用模块,你会得到一些额外的灵活性,因为模块给你的安全边界。

相关内容

  • 没有找到相关文章

最新更新