【问题标题】:Make public class open internally but closed externally kotlin使公共课程内部开放但外部关闭 kotlin
【发布时间】:2021-02-27 00:31:53
【问题描述】:

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

【问题讨论】:

  • 这就是使用sealed 类的地方!

标签: kotlin public


【解决方案1】:

您可以将其构造函数定义为internal。子类必须调用超类的构造函数,因此只有可以看到该构造函数的文件才能对您的类进行子类化。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2021-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      • 2010-12-30
      • 2018-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多