如何从 Kotlin 中的不同模块访问内部成员?

How can I access the internal members from a different module in Kotlin?

在 Kotlin 中,将“内部”应用于 public class 的成员函数时,它仅在模块内部可见。

在有核心模块的情况下,另一个模块(称为外部模块)具有从核心模块中定义的 class 派生的 class。

核心模块

package com.core

class BaseClass {
   internal fun method_internal() {...}
   public fun method_public() {...}
}

在核心模块中,method_internal()可以在BaseClass之外访问。

在应用程序中,谁对核心模块有依赖,BaseClass就可以在应用程序中使用,但在应用程序中是看不到内部的method_internal()。这就是想要的 internal 行为。

在另一个模块(外部模块)中,它有一个 class 派生自 BaseClass.

外部模块

package com.outermodule

class DerivedClass : BaseClass {
......
}

在外部模块中它可以使用来自 DerivedClass 的 method_public(),但它不能访问 method_internal().

并且它不能将 method_internal 设为 protected,因为它应该允许在核心模块的任何地方访问。

如何使该方法在一个模块中具有 internal 可见性,但至少能够从其他模块中的派生 classes 访问?

它不漂亮,但您可以创建两个函数。

open class BaseClass {
    protected fun foo() {
        println("foo!")
    }

    internal fun fooInternal() = foo()

}