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

lan*_*nyf 1 visibility internals kotlin

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

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

核心模块

package com.core

class BaseClass {
   internal fun method_internal() {...}
   public fun method_public() {...}
}
Run Code Online (Sandbox Code Playgroud)

在核心模块中,method_internal()可以在BaseClass.

在应用程序中,无论谁依赖于核心模块,都BaseClass可以在应用程序中使用,但在应用程序中它看不到内部的method_internal(). 这就是internal我们想要的行为。

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

外层模块

package com.outermodule

class DerivedClass : BaseClass {
......
}
Run Code Online (Sandbox Code Playgroud)

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

它不能使method_internalasprotected因为它应该允许在核心模块中的任何地方进行访问。

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

Ten*_*r04 6

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

\n
open class BaseClass {\n    protected fun foo() {\n        println("foo!")\n    }\n\n    internal fun fooInternal() = foo()\n\n}\n
Run Code Online (Sandbox Code Playgroud)\n