我正在设计一个SPI,其中的继承结构是一棵树。所以你可以想象,一些类是树中的叶子节点,有些则不是。
我的问题是我想限制这个继承结构,允许开发人员只扩展特定的类(主要是叶子节点)。根据问题的定义,我不能将早期的类声明为final,否则叶节点类不能扩展它们。
final
我怎么能做到这一点?
您可以将所有父类放在与“leaf”类相同的包中,使所有这些父类在范围内包为private(不要将它们声明为public)。这将限制其可见性。
如果您很幸运使用java 9,则可以在项目中使用模块并仅导出叶类。