使 public class 在内部打开但在外部关闭 kotlin

Make public class open internally but closed externally kotlin

我有一个 public 抽象 class,我希望模块中的其他 class 扩展它,但我不想在外部扩展。 我知道我可以将其密封,但它有很多子classes,将它们全部放在同一个文件中会很麻烦。如何实现?

您可以将其设为 sealed,但在同一个文件中只声明一个 internal(而不是 sealed)子 class。然后模块中的其他 classes 可以看到并扩展内部子 class,因此您的原始 class.

Note that classes which extend subclasses of a sealed class (indirect inheritors) can be placed anywhere, not necessarily in the same file.

编辑:缺点是扩展的 classes 也必须是 internal(甚至更不可见)。 Louis Wasserman 的解决方案避免了这种情况并且更简单。

您可以将其构造函数定义为internal。 Subclasses 必须调用 superclass' 构造函数,因此只有可以看到该构造函数的文件才能 subclass 你的 class.